2012-03-13 6 views
2
Array 
(
    [user_mob_1] => Array 
     (
      [mob_code] => 06 
      [mob] => 069633345 
      [type] => 1 
      [phone_id] => 0 
     ) 

    [user_mob_2] => Array 
     (
      [mob_code] => 07 
      [mob] => 07123456 
      [type] => 1 
      [phone_id] => 
     ) 

    [user_mob_6] => Array 
     (
      [mob_code] => 0 
      [mob] => 
      [type] => 1 
      [phone_id] => 0 
     ) 

) 

Цель состоит в том, чтобы удалить user_mob_ *, где толпа пуста!Фильтр многомерных массивов

Ответ:

foreach($array as $key => $row) { 
    if(empty($row['mob'])) unset($array[$key]); 
} 

Простой, но я новичок в PHP и первым я thinked использовать такие функции, как array_filter и т.д.

Все гениальное просто.

+0

Возможный дубликат [Поиск и удаление из многомерного массива] (http://stackoverflow.com/questions/3795227/search-and-remove-from-multidimensional-array) – Gordon

+0

, пожалуйста, используйте функцию поиска, прежде чем задавать вопросы. Об этом просили и ответили несколько раз. [Сделайте домашнее задание] (http://stackoverflow.com/questions/ask-advice) – Gordon

+2

Правильный ответ на свой вопрос - это ответ (а не вопрос). Таким образом, люди могут голосовать за все предоставленные ответы, а лучшие могут подняться на вершину. – Paul

ответ

23

Ваша идея использования встроенной функции, такой как array_filter, очень хорошая; У PHP много таких, которые могут сделать вашу жизнь проще.

В частности, array_filter принимает callback, которые вы можете использовать для настройки логики фильтрации. Это будет работать:

$filtered = array_filter($array, function($el) { return !empty($el['mob']); }); 

Здесь обратный вызов поступает как anonymous function.

+1

Я не спустил вниз, но если вы заметили вопрос, вопрос не задавался, и ваше решение не делало, что вопросник сказал, что решение было. – Paul

+0

@Paul: Извините за то, что вы так долго выкапывали (я пришел сюда из-за комментария Мэтта), но ответ почти эквивалентен тому, что дает OP (разница в том, что OP изменяет входной массив напрямую, в то время как это создает фильтрованный копия). – Jon

+0

Также ответ OT основывается на том, что foreach работает над копией входного массива. То же самое с любым другим циклом приведет к очень нежелательным результатам. То, что я пытаюсь сказать, - это то, что для начинающих php, видя ответ orignal, может заставить их поверить, что это безопасно, не зная, почему это действительно работает. – Yoshi

Смежные вопросы