У меня есть массив с этой структурой (это одна из записей):
[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] для обновления. Что мне не хватает?
С 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
.
Измените эту строку,
foreach($creds as $cred){
в
foreach($creds as &$cred){ // pass $cres value by reference
Теперь изменения в $cred
применяются к вашему массиву