php计数xml元素是';只有一种元素时,它就不能正常工作

php计数xml元素是';只有一种元素时,它就不能正常工作,php,arrays,xml,multidimensional-array,Php,Arrays,Xml,Multidimensional Array,我在计算xml元素时遇到问题。让我们看一个例子 <products> <product> <id>1</id> <name>first</name> <url>test1</url> </product> <product> <id>2</id> <name>second</name&

我在计算
xml
元素时遇到问题。让我们看一个例子

<products>
  <product>
    <id>1</id>
    <name>first</name>
    <url>test1</url>
  </product>
  <product>
    <id>2</id>
    <name>second</name>
    <url>test1</url>
  </product>
</products>
但当我只有一个产品时:

<products>
  <product>
    <id>1</id>
    <name>first</name>
    <url>test1</url>
  </product>
</products>
有什么想法吗

更新:

Array
(
  [0] => Array
    ([id]=>1...)
  [1] => Array
    ([id]=>2...)
)
Array
(
  [id]=>1...
)

我可以使用
count($array['products'])当只有一种产品时。没关系。但是,我在循环中检查xml。我如何知道它是否有一个产品?首先,我必须计算产品。

您只需计算($array['products')

您只需计算($array['products'])

您的XML代码格式不正确。缺少产品1的结束标记。在第二个示例中,您有两个
打开标记,但没有关闭标记。

您的XML代码格式不正确。缺少产品1的结束标记。在第二个示例中,您有两个打开的标记,但没有关闭的标记。

最后我提出了一个解决方案:我必须检查
产品是否为多维数组

在第一种情况下:

Array
(
  [0] => Array
    ([id]=>1...)
  [1] => Array
    ([id]=>2...)
)
Array
(
  [id]=>1...
)
在第二种情况下:

Array
(
  [0] => Array
    ([id]=>1...)
  [1] => Array
    ([id]=>2...)
)
Array
(
  [id]=>1...
)
现在我编写了一个函数来检查它是否是多维数组。如果数组不是多维的,那么计数是一

public function isMultiArray($arr){
    foreach ($arr as $key) {
        if (is_array($key)) {
            return true;
        }
        else return false;
    }
}

最后我提出了一个解决方案:我必须检查
产品
是否为多维数组

在第一种情况下:

Array
(
  [0] => Array
    ([id]=>1...)
  [1] => Array
    ([id]=>2...)
)
Array
(
  [id]=>1...
)
在第二种情况下:

Array
(
  [0] => Array
    ([id]=>1...)
  [1] => Array
    ([id]=>2...)
)
Array
(
  [id]=>1...
)
现在我编写了一个函数来检查它是否是多维数组。如果数组不是多维的,那么计数是一

public function isMultiArray($arr){
    foreach ($arr as $key) {
        if (is_array($key)) {
            return true;
        }
        else return false;
    }
}

您没有解释最初是如何派生数组的,但我假设是通过
DOMDocument
?在这种情况下,您应该能够使用这样的方法推断长度/计数

$strxml='<products>
  <product>
    <id>1</id>
    <name>first</name>
    <url>test1</url>
  </product>
</products>';


$dom=new DOMDocument;
$dom->loadXML( $strxml );

$col=$dom->getElementsByTagName('product');
if( is_object( $col ) ){
    echo $col->length;  
}
$col=$dom=null;
$strxml='1!'
1.
第一
测试1
';
$dom=新的DOMDocument;
$dom->loadXML($strxml);
$col=$dom->getElementsByTagName(“产品”);
if(is_object($col)){
echo$col->length;
}
$col=$dom=null;

您没有解释最初是如何派生数组的,但我假设是通过
DOMDocument
?在这种情况下,您应该能够使用这样的方法推断长度/计数

$strxml='<products>
  <product>
    <id>1</id>
    <name>first</name>
    <url>test1</url>
  </product>
</products>';


$dom=new DOMDocument;
$dom->loadXML( $strxml );

$col=$dom->getElementsByTagName('product');
if( is_object( $col ) ){
    echo $col->length;  
}
$col=$dom=null;
$strxml='1!'
1.
第一
测试1
';
$dom=新的DOMDocument;
$dom->loadXML($strxml);
$col=$dom->getElementsByTagName(“产品”);
if(is_object($col)){
echo$col->length;
}
$col=$dom=null;

不清楚您是如何将XML转换为该数组的

如果使用
SimpleXml
直接解析XML,
count()
将给出准确的结果:

$xml = simplexml_load_string($x); // assume XML in $x
echo $xml->product->count(); 

不清楚您是如何将XML转换为该数组的

如果使用
SimpleXml
直接解析XML,
count()
将给出准确的结果:

$xml = simplexml_load_string($x); // assume XML in $x
echo $xml->product->count(); 


这是因为
$array['products']['product']
$array['products'][0]
的快捷方式-您计算的是主数组['products']的第一个产品节点内的元素,而不是arr/product/product节点数。@MarcB不,您错了。当有多个产品时,这是有效的。这是因为
$array['products']['product']
$array['products'][0]
的快捷方式-您计算的是主数组['products']的第一个产品节点内的元素,而不是arr/product/product节点的数量。@MarcB不,您错了。当有多个产品时,这就是工作。没关系。但是,我在循环中检查xml。我如何知道它是否有一个产品?首先,我必须计算产品数量。计算$array['products']将给出该数组中的元素数量,这将是产品数量,查看您的结构…我找到了解决方案,谢谢。(请看我的答案)没关系。但是,我在循环中检查xml。我如何知道它是否有一个产品?首先,我必须计算产品数量。计算$array['products']将给出该数组中的元素数量,这将是产品数量,查看您的结构…我找到了解决方案,谢谢。(请看我的答案)对不起,这只是一个打字问题。我找到了解决方案,谢谢。(请看我的答案)对不起,这只是一个打字问题。我找到了解决方案,谢谢。(请看我的答案)非常感谢。我提出了一个解决方案,你可以从答案中看到。非常感谢。我制定了一个解决方案,您可以在答案中看到。我没有使用
对象
。首先,我将XML转换为
json
,然后在数组中对其进行解码。我解决了我的问题。检查我的答案:我没有使用
对象
。首先,我将XML转换为
json
,然后在数组中对其进行解码。我解决了我的问题。在这里检查我的答案: