我有一个查找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;给了我一个致命的错误。
感谢您的帮助。
答案 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
替换当前值。