当有一个元素时,PHP 计数 XML 元素无法正常工作


php count xml elements isn't work fine when there is one element

我在计算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>

在 php 中:对于此示例,它计数很好:

count($array['products']['product']);
// This gives me 2

但是当我只有一个产品时

<products>
  <product>
    <id>1</id>
    <name>first</name>
    <url>test1</url>
  </product>
</products>

现在在 php 中:

count($array['products']['product']);
// This gives me 3 , number of sub elements of product (It must be 1)
//(because in this case we have one product and there is no sub array for counting,
//so instead of another product, features of product is counting)

知道吗?

更新:

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

你只需要计数($array['产品']);

您最初没有解释如何派生数组,但我假设通过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;

不清楚如何将 XML 转换为该数组。

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

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

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

最后我做了一个解决方案:我必须检查product是否是多维数组。

在第一种情况下:

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

在第二种情况下:

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

现在我写了一个函数来检查它是否是多维数组。如果数组不是多维的,则计数为 1!

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