这是我想要实现的。 我进口产品的XML文件(产品标签有一个id属性: 作为一个例子xml foreach跳过如果在php语句
还有就是我想检索产品标签内1个标签(类别),但我只想要一个实例它。所以我创建了一个标志,以帮助区分当产品ID的变化。
我的代码看起来像这样
<?php
$flag='start';
foreach($xml->product as $product)
{
$attrs = $product->attributes();
echo "$attrs ($flag)"; // just used for testing results
if ($flag != $attrs) {
echo "| <a href='xmltest.php?menuitem=$attrs'>".$product->category." </a><br>";
$flag=$attrs;
}
}
?>
应该在第一次运行会发生什么是标志不匹配的attrs,该链接被回应,国旗现在匹配attrs。
如果我有5个ID为1,1,2,2,2的产品标签,代码应该两次回显链接(首先当$ flag = start,而$ attrs = 1时,以及$ flag = 1 while $ attrs = 2)...
相反,它回声5次,基本上忽略if语句。
我看不到if语句出错的地方。谁能帮忙?
更新感谢花洒,我一直在努力您的建议,我比以前更近一点。
我做的var_dump,结果我看到这个样子的
标志的var_dump的结果:string(5) “开始” ATTRS的var_dump结果:对象(的SimpleXMLElement)#6(1){[ “@属性”] =>数组(1){ [ “ID”] =>串(1) “0”}} 0(0)
标志的var_dump结果:对象(的SimpleXMLElement)#6(1) {[“@attributes”] => array(1){ [“id”] => string(1)“0”}}
attrs var_dump result:object (0)
flag var_dump result:#5(1){[“@attributes”] =>数组(1){var id_dump结果:对象(SimpleXMLElement)#5(1){[“@attributes”] =>数组(1){ [“id”] => string(1)“0”}}
attrs var_dump result:object (0)
flag var_dump result:#4(1){[“@attributes”] =>数组(1){“id”] => string(1)“0”}} object(SimpleXMLElement)#4(1){[“@attributes”] => array(1){ [“id”] => string(1)“0”}}
attrs var_dump result:object(SimpleXMLElement)#8(1){[“@attributes”] => array(1){“id”] => string(1)“1”}} 1(1)
标志的var_dump结果:对象(的SimpleXMLElement)#8(1){[ “@属性”] =>数组(1){ [ “ID”] =>串(1) “1”}}
我现在明白了$ flag var作为一个字符串开始,然后采用数组的值。
我试过如果(!is_array($ flag)& & $ flag!= $ attrs){但结果是一样的。
有没有另一种方法可以让我的值比较类似?再次
感谢,
UPDATE
一个简单的爆炸帮助解决这个问题。这是为我工作的代码。
<?php
$flag='start';
foreach($xml->product as $product)
{
$category = $product->category;
$attrsvar = $product->attributes();
$attrs = explode(" ", $attrsvar);
if(! is_array($flag) && $flag != $attrs[0]) {
echo " <a href='xmltest.php?menuitem=".$attrs[0]."'>".$category." </a> | ";
$flag=$attrs[0];
}
}
?>
如果我可以投票,我会。我还没有足够的代表 – 2012-04-03 14:53:24
我将你标记为正确的答案,因为它确切地指导了我需要完成代码的位置。你真棒淋浴头! :) – 2012-04-03 15:16:13
非常感谢,看看更多的想法:) – mseancole 2012-04-03 15:31:26