У меня есть PHP-код, который смотрит в массив xml; то, что я хочу сделать, это изменить следующее значение этой находки. Я могу правильно отследить вывод, но при попытке изменить значение я получаю фатальную ошибку.
Я называю свою функцию следующим образом:
$ 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-> string = $ newValue, я могу редактировать строку с новым значением; но следующий ($tmp-> string) = $ newValue; дает мне фатальную ошибку.
Спасибо за помощь.
Значение не может быть присвоено (в 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;
). В "match" установите его равным true
, а затем на следующей итерации проверьте, соответствует if($matched == true)
; если это так, то замените текущее значение на $newValue
.