2015-08-03 2 views
1

У меня есть php-код, который анализирует массив xml; то, что я хочу сделать, это изменить следующее значение этой находки. Я могу правильно отследить вывод, но при попытке изменить значение я получаю фатальную ошибку.PHP с использованием foreach, изменение следующего значения возвращает фатальную ошибку

Я называю свою функцию следующим образом:
$ XML = replaceDeleteOrAddMethod ("пустота", "метод", "положить", $ templateID_category, $ XML, "категория", "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-> строка = $ новое_значение Я могу отредактировать строку с новым значением; но следующий ($ tmp-> string) = $ newValue; дает мне фатальную ошибку.

Спасибо за помощь.

+0

Возможный дубликат [PHP - Изменить текущий объект в цикле foreach] (http://stackoverflow.com/questions/10121483/php-modify-current-object-in-foreach-loop) – River

+0

Это не то же самое, я Я не говорю о ссылках на использование & Я говорю, почему использование следующего не позволяет мне изменить значение, но повторяет, что следующий vlaue работает – JSChasle

+0

Просто нужно сделать: $ tmp-> string [1] = $ newValue; (чтобы получить второе значение строки – JSChasle

ответ

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;). В «match» установите его равным true, а затем на следующей итерации отметьте if($matched == true); если это так, то замените текущее значение на $newValue.

Смежные вопросы