2014-09-10 2 views
1

У меня есть массив, в котором есть еще один массив. Мне нужно отключить индекс вспомогательного массива.Unset index массива внутри другого массива

array 
    0 => 
    array 
     'country_id' => string '1' (length=1) 
     'description' => string 'test' (length=4) 
    1 => 
    array 
     'country_id' => string '2' (length=1) 
     'description' => string 'sel' (length=5) 
    2 => 
    array 
     'country_id' => string '3' (length=1) 
     'description' => string 'soul' (length=5) 

Теперь мне нужно сбросить country_id всех трех индексов главного массива. Я использую PHP, и изначально я думал, что unset будет делать, пока я не понял, что мой массив вложен.

Как я могу это сделать?

+0

'Еогеасп ($ массив as & $ element) {unset ($ element ['country_id'];} ' – Steve

+0

' foreach ($ array as & $ sub) unset ($ sub ['country_id']); ' –

+0

Возможный дубликат [PHP - unset in многомерный массив] (http: // stackoverflow .com/вопросы/7260468/PHP-незадана-в-многомерного массива) – Joanvo

ответ

0
foreach ($original_array as &$element) { 
    unset($element['country_id']); 
} 

почему &$element?

Поскольку foreach (...) выполнит копию, так что нам нужно передать ссылку на «текущий» элемент для того, чтобы сбросить его (а не его копию)

0
foreach ($masterArray as &$subArray) 
    unset($subArray['country_id']); 

Идея заключается в том, что вы каждый суб массив по ссылке и отключить ключ внутри этого.


EDIT: еще одна идея, просто чтобы сделать интересные вещи, будет использовать функцию array_walk.

array_walk($masterArray, function (&$item) { unset ($item['country_id']); }); 

Я не уверен, что это более читаемо, и вызов функции сделает его медленнее. Тем не менее, вариант есть.

0

Вы должны использовать:

foreach ($array as &$item) { 
    unset($item['country_id']); 
} 

, но после того, как петли вы должны действительно незадана ссылка иначе вы можете попасть в беду, так что правильный код:

foreach ($array as &$item) { 
    unset($item['country_id']); 
} 
unset($item); 
Смежные вопросы