【发布时间】:2012-04-02 21:19:12
【问题描述】:
这就是我想要实现的目标。 我正在导入产品的 xml 文件(产品标签有一个 id 属性: 举个例子。
我试图检索的产品标签中有 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 而 $ attrs=2)...
相反,它全部回显了 5 次,基本上忽略了 if 语句。
我看不出 if 语句哪里出错了。有人可以帮忙吗?
更新谢谢 Showerhead,我一直在尝试你的建议,我比以前更接近了。
我做了 var_dump,我看到的结果是这样的
标记 var_dump 结果:字符串(5)“开始” attrs var_dump 结果:object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "0" } } 0 (0)
flag var_dump 结果:object(SimpleXMLElement)#6 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "0" } }
attrs var_dump 结果:object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "0" } } 0 (0)
flag var_dump 结果:object(SimpleXMLElement)#5 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "0" } }
attrs var_dump 结果:object(SimpleXMLElement)#4 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "0" } } 1 (0)
flag var_dump 结果:object(SimpleXMLElement)#4 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "0" } }
attrs var_dump 结果:object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "1" } } 1 (1)
flag var_dump 结果:object(SimpleXMLElement)#8 (1) { ["@attributes"]=> array(1) { ["id"]=> 字符串(1) "1" } }
我现在明白 $flag var 是如何从字符串开始,然后采用数组的值的。
我试过 if( !is_array($flag) && $flag != $attrs) { 但结果是一样的。
还有其他方法可以让值相似以进行比较吗?
再次感谢,
更新
一个简单的爆炸帮助解决了这个问题。这是对我有用的代码。
<?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];
}
}
?>
【问题讨论】:
标签: php if-statement foreach