обновить массив значением из того же массива

1

У меня есть массив с этой структурой (это одна из записей):

[11] => Array
        (
            [id_cred] => CD000000905
            [gbv_tot] => 482197.51
            [ammesso] => 482197.51
            [tipo] => 1
            [importo] => 0
            [stato] => aperta
        )

Я прокручиваю его в foreach, чтобы установить [importo] равным [gbv_tot] или [ammesso] на основе некоторых условий. Я написал этот код, но, похоже, не обновляет значение ключа [importo].

foreach($creds as $cred){
    if(($cred['tipo'] == '1')&&($tipo_az == 'conc')){
        //sto elaborando un chirografo in una azione concorsuale quindi prendo il nominale
        if($cred['stato']=='aperta'){
            $gbv_compl = $gbv_compl + $cred['ammesso'];
            $cred['importo'] = $cred['ammesso'];
        }else{
            $cred['importo'] = 0;
        }
    }else{
        //sto elaborando qualcosa d'altro e quindi prendo il GBV
        if($cred['stato']=='aperta'){
            $gbv_compl = $gbv_compl + $cred['gbv_tot'];                 
            $cred['importo'] = $cred['gbv_tot'];
        }else{
            $cred['importo'] = 0;
        }
    }
}

Я думаю, что это неправильный способ сделать это, так как я не могу получить [importo] для обновления. Что мне не хватает?

Теги:
arrays

2 ответа

3
Лучший ответ

С foreach($creds as $cred){ $cred не будет ссылаться на основной array. Для каждой итерации он назначит текущему элементу $cred. Вам нужно использовать key -

foreach($creds as $key => $cred){

И установите значение как -

$creds[$key]['importo'] = 'whatever value it is';

Чтобы иметь возможность напрямую изменять элементы массива в цикле, перед значением $ value нужно указать &. В этом случае значение будет присвоено по ссылке.

foreach ($creds as &$cred) {

Используя ссылку, вы можете напрямую их обновить. Теперь -

$cred['importo'] = 0;

Изменит значение текущего элемента основного array.

  • 0
    Спасибо! Я думал, что, поскольку я был в цикле foreach, я мог бы опустить ключ .. Помечу это как решенное, как только смогу :)
5

Измените эту строку,

foreach($creds as $cred){

в

foreach($creds as &$cred){ // pass $cres  value by reference

Теперь изменения в $cred применяются к вашему массиву

Ещё вопросы

Сообщество Overcoder
Наверх
Меню