将数组中的每个单词保存到变量中

时间:2015-05-08 14:09:34

标签: php arrays

我有一个名为$ 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']并将它们保存在单独的变量中。但是我不能直接使用它们,因为它必须动态完成,以防后续添加其他元素。

2 个答案:

答案 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查看其内容。