2013-08-15 2 views
0

У меня есть массив, как показано ниже.Как заменить значение внутри массива?

array (size=2) 
    '1S1' => 
     array (size=8) 
     'order_id' => int 0 
     'item_id' => int 1 
     'special_desc' => string 'Special XXX' (length=11) 
     'qty' => int 2 
     'price' => int 50 
     'amount' => int 0 
     'created_at' => int 1376580193 
     'updated_at' => int 1376580193 
    '1S2' => 
     array (size=8) 
     'order_id' => int 0 
     'item_id' => int 2 
     'special_desc' => string 'Special YYY' (length=11) 
     'qty' => int 3 
     'price' => int 150 
     'amount' => int 0 
     'created_at' => int 1376580193 
     'updated_at' => int 1376580193 

Если бы я хотел, чтобы заменить «ORDER_ID» обоих элементов этого массива на новое значение перед сохранением в базе данных, какую функцию массив или метод можно использовать?

Спасибо.

+0

Является ли массив динамическим, в котором вы не знали бы ключей к первому уровню? –

+1

Что случилось с циклом в вашем массиве и модификацией переменных напрямую? –

+1

просто прокрутите массив, например. с foreach и изменить ваше значение – sinaneker

ответ

2

Взгляните на array_walk:

$array = array_walk($array, function($subArray) { 
    $subArray[ 'order_id' ] = 'someNewValue'; 
}); 

Простой foreach может работать тоже.

// Noting the '&' by reference call 
foreach($array as &$subArray) { 
    $subArray[ 'order_id' ] = 'someNewValue'; 
} 
// Or 
foreach($array as $key => $value) { 
    $array[ $key ][ 'order_id' ] = 'someNewValue'; 
} 
+0

Правильная функция для использования в этой ситуации - ['array_walk'] (http://php.net/array_walk), а не 'array_map' (ваша функция ничего не возвращает). – Ryan

+0

ах, да, извините. Смешивание двух вместе ..... fixed – Ascherer

+0

Я использую для каждого, но значения не меняются. $ cartItems = array_values ​​($ cartItems); foreach ($ cartItems as $ cartItem) { $ cartItem ['order_id'] = 50; } var_dump ($ cartItems); – Artisan

0
$array_name['1S1']['order_id'] = some value; 
$array_name['1S2']['order_id'] = some value; 
+0

Вот почему я специально спросил OP, если ключи массива первого уровня были динамическими, и в этом случае это не сработает: p Вам нужно будет петли –

+0

И нисходящий для чего? – j08691

+0

Извините, цикл по всему массиву лучше для моего случая, но я все еще не могу получить значение, измененное с помощью foreach. – Artisan