У меня есть массив, который выглядит так
$array = Array ( [0] => Array ( [Product] => Amazing Widget [Value] => 200 ) [1] => Array ( [Product] => Super Amazing Widget [Value] => 400 ) [2] => Array ( [Product] => Promising Widget [Value] => 300 ) [3] => Array ( [Product] => Superb Widget [Value] => 400 ) }
Я хочу обновить массив, чтобы изменить «Перспективный виджет» на 800 вместо 300.
Обратите внимание, что порядок этого массива произволен, что означает, что мне нужно обновить значение, основанное на значении имени продукта (не на его номере в массиве).
Я пытался получить к нему доступ по номеру в массиве, но понял, что не будет работать по этой причине, и я не уверен, как изменить значение одного элемента многомерного массива на основе другого.
Спасибо за любую помощь.
foreach($array as &$value){ if($value['Product'] === 'Promising Widget'){ $value['Value'] = 800; break; // Stop the loop after we've found the item } }
Итак, вы перебираете массив, находите нужное значение, а затем меняете его. Значение &$value
так массива передается по ссылке. Это означает, что мы можем непосредственно редактировать значения в массиве из цикла, не выполняя $array[$key]['Value']
.
Я думаю, вам придется перебирать их, что-то вроде:
foreach ($array as $k => $v) { if ($v['Product']=='Promising Widget') { $array[$k]['Value']=800; } }
Я считаю, что наиболее универсальный подход заключается в использовании функции array_walk_recursive :
array_walk_recursive($array, 'updateValue'); function updateValue(&$data, $key) { if($key == 'Promising Widget') { $data = 800; } }
Таким образом, даже если вы измените свой массив позже, эта функция будет работать нормально.
Этот ответ может быть слишком запоздалым, но я столкнулся с аналогичными проблемами, которые я решил использовать с этой функцией
function r_search_and_replace( &$arr ) { foreach ( $arr as $idx => $_ ) { if( is_array( $_ ) ) r_search_and_replace( $arr[$idx] ); else { if( is_string( $_ ) ) $arr[$idx] = str_replace( "PATTERN", "REPLACEMENT", $_ ); } } }