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