2014-10-28 4 views
1

У меня проблема. Я работаю над тем, где мне нужно прокрутить 2 разных массива и изменить значение элементов во втором массиве. По какой-то причине приведенный ниже код будет проходить через оба массива и изменять значение во втором массиве, но когда я снова вернусь к значениям из второго массива, они будут возвращены к нулю. Кто-нибудь знает, что здесь происходит или что я могу делать неправильно?php изменение значения элемента внутри массива 2d

<?php 
$list1 = array( array("item1", 1), 
       array("item2", 1), 
       array("item3", 2), 
       array("item4", 6)); 


$list2 = array( array("CHF", 0), 
       array("HF", 0), 
       array("AMI", 0), 
       array("COPD", 0), 
       array("PN", 0), 
       array("THA", 0), 
       array("TKA", 0)); 

foreach($list1 as $stuff) { 
    foreach($list2 as $val) { 
     $val[1] = $val[1] + 1; 
    } 
} 

foreach($list2 as $poo) {    
    echo "<br/>" . $poo[0] . " = " . $poo[1]; 
} 
?> 

это выводит следующее

CHF = 0, HF = 0, AMI = 0, ХОЗЛО = 0, PN = 0, ТХ = 0, ТКА = 0

Но то, что я хочу его выход:

CHF = 1, HF = 1, AMI = 1, ХОЗЛЫ = 1, PN = 1, ТХ = 1, ТКА = 1

+1

его совсем неясно – meda

ответ

2

Вам нужно сделать значение цикла assign-by-reference вместо значения в цикле foreach следующим образом:

foreach($list1 as &$stuff) { 
    foreach($list2 as &$val) { 
     $val[1] = $val[1] + 1; 
    } 
} 

Если присваивать значения, вы получаете и модификации копии элементов, которые затем отбрасываются , Вот почему исходный массив остается нетронутым.

+0

Большое вам спасибо! Вы понятия не имеете, как долго я работал над этим. Не могу поверить, что это было просто, как добавление символа «&» ... lol – Austin

0

О, вы должны передать свой второй массив, Справка. Просто добавьте & к его названию во второй цикл foreach. Ваш вариант работает на копии массива. Кроме того, необходимо немного реорганизовать свой код. Только сейчас он будет увеличивать каждое значение во втором массиве четыре раза, потому что код для каждого элемента из внутреннего массива будет выполняться для каждой итерации из внешнего массива.

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