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
,然后在数组中对其进行解码。我解决了我的问题。在这里检查我的答案: