PHP使用foreach,更改下一个值会返回致命错误

时间:2015-08-03 23:23:48

标签: php xml

我有一个查找xml数组的php代码;我想要做的是更改该查找的下一个值。我可以正确地回显输出,但在尝试更改值时,我会收到致命的错误。

我这样称呼我的功能:
$ xml = replaceDeleteOrAddMethod(“void”,“method”,“put”,$ templateID_category,$ xml,“category”,“itsastring”);

我所做的功能如下:

function replaceDeleteOrAddMethod($element, $methodName, $methodValue, $newValue, $xml, $methodstringname, $methodvartype)
{
    //echo "replacing Value for: " .  $propertyValue;
  foreach ($xml->xpath("//" . $element) as $tmp)
  {
    //echo $tmp->string . "<br>"; 
    if((string) $tmp[$methodName] == $methodValue )
    {
        if ($tmp->string == $methodstringname)
        {
            switch ($methodvartype){
                case "itsastring":
                    echo $tmp->string . "<br>";
                    echo next($tmp->string) . "-> NewValue: " . $newValue . "<br>";
                    next($tmp->string) = $newValue;
                break;
                case "itsaint":
                    echo $tmp->int . "<br>"; 
                    next($tmp->int) = $newValue;
                break;
                case "itsabool":
                    echo $tmp->bool . "<br>"; 
                    next($tmp->bool) = $newValue;
                break;
            }
        }
    }
  }
  return($xml);

}

如果我执行$ tmp-&gt; string = $ newValue我可以使用新值编辑字符串;但是接下来($ tmp-&gt; string)= $ newValue;给了我一个致命的错误。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

无法将值赋值给(以PHP或凡人的任何编程语言)。

这是一个简化的例子:

$ints = array(1, 2, 3, 4, 5);
$first = current($ints);      // $first = 1;
next($ints) = 99;             // 2 = 99;

这没有意义。在此上下文中next($ints)返回2。它无法分配到99

目前尚不清楚$tmp->string(或其代码片段中的兄弟姐妹)是否为数组。 next在操作数组时只会有所需的行为。

假设你想要做的是操作XPath循环中的下一个元素,你可以创建一个触发变量(例如$matched = false;)。在“匹配”上设置它等于true,然后在下一次迭代中,检查if($matched == true);如果是,则用$newValue替换当前值。