我有一个名为$ child的数组,其中至少包含单词。我想遍历数组并将每个单词保存到一个单独的变量中。目前我试过:
for($i = 0; $i < $child->count();$i++)
{
$var1 = (string) $child[$i]->xpath;
$var2 = (string) $child[$i+1]->xpath;
$var3 = (string) $child[$i+2]->xpath;
}
这给出了一个错误,说我正在尝试获取非对象的属性。如果在数组中有更多单词的情况,它也不是很通用。
我们非常感谢任何建议。
抱歉,我犯了一个错误,这不是一个单词。基本上我有一个名为$ operation的SimpleXMLElement对象。 SimpleXMLElement对象([@attributes] =&gt;数组([type] =&gt;和)[child] =&gt;数组([0] =&gt; SimpleXMLElement对象([xpath] =&gt; noNotification [assert] =&gt; exists)[1] =&gt; SimpleXMLElement对象([xpath] =&gt; sequence [assert] =&gt;不存在)[2] =&gt; SimpleXMLElement对象([xpath] =&gt; dataType / enumRef [@name =' OperState'] [assert] =&gt;存在)))
我希望从中提取noNotification,sequence和dataType / enumRef [@name ='OperState']并将它们保存在单独的变量中。但是我不能直接使用它们,因为它必须动态完成,以防后续添加其他元素。
答案 0 :(得分:2)
首先,代码中缺少一个小字符<
。它应该是这样的;
for($i = 0; $i < $child->count(); $i++) {
$var1 = (string) $child[$i]->xpath;
$var2 = (string) $child[$i+1]->xpath;
$var3 = (string) $child[$i+2]->xpath;
}
现在回到代码
您将遇到此代码的问题,因为您没有检查$child[$i+1]
是否实际设置了。 $i
可以达到$child
的最大长度,并且仍会尝试获取下两个元素。因此,您最终会遇到此错误trying to get a property of a non-object
如果你采用这种方法,你至少应该这样做;
for($i = 0; $i < $child->count(); $i++) {
$var1 = (string) $child[$i]->xpath;
if (isset($child[$i+1]->xpath)) $var2 = (string) $child[$i+1]->xpath;
if (isset($child[$i+2]->xpath)) $var3 = (string) $child[$i+2]->xpath;
}
为了向您提供更多更好的答案,我们需要了解$child
的结构。
以这种方式循环这种方式是非常糟糕的做法。考虑一下;
$child = array("test1","test2","test3","test4","test5","test6");
for($i = 0; $i < count($child); $i++){
echo $child[$i]."<br />";
if (isset($child[$i+1])) echo $child[$i+1]."<br />";
if (isset($child[$i+2])) echo $child[$i+2]."<br />";
}
你最终会重复一遍。因为循环本身正在通过下一个元素并且在循环内,所以你继续使用下两个元素。
编辑(看到结构后)
试试这个;
$words = array();
for($i = 0; $i < count($operation->child); $i++) {
if (isset($operation->child[$i]->xpath)) {
$words[$i] = (string) $operation->child[$i]->xpath;
}
}
答案 1 :(得分:-2)
您的代码中存在多个错误。
首先应使用http://api.jquery.com/val/
解析所有数组考虑到这一点:
foreach($child as $key => $value) {
${'word' . $key} = $value;
}
现在您可以使用从$ word0开始的变量。
编辑:根据您的意见:
$myArray = array();
foreach($child as $key => $value) {
$myArray[$key] = array(
'xpath' => (string)$value->xpath,
'assert' => (string)$value-> assert,
);
}
由于您可能有很多变量,因此将数据保存到数组中也会更好。
在foreach之后尝试foreach查看其内容。