2016-02-18 2 views
2

Я пытаюсь удалить вспомогательный массив моего многомерного массива, если какое-либо значение пусто, чем удалить весь массив. Я хочу универсальную функцию для того же самого! Не хотите вводить определенные ключи. А чем ReIndex вновь созданный массив.Элемент многомерного массива, если пустой, удаляет всю подматрицу PHP

Мой массив как

Array 
(
    [0] => Array 
     (
      [name] => Test 
      [mobile] => 613594551 
      [email] => [email protected] 
     ) 
    [1] => Array 
     (
      [name] => Test1 
      [mobile] => 613594552 
      [email] => [email protected] 
     ) 
    [2] => Array 
     (
      [name] => Test2 
      [mobile] => 613594553 
      [email] => [email protected] 
     ) 
    [3] => Array 
     (
      [name] => Test3 
      [mobile] => 613594554 
      [email] => [email protected] 
     ) 
) 

Так что, если мой массив

Array 
(
    [0] => Array 
     (
      [name] => 
      [mobile] => 613594551 
      [email] => [email protected] 
     ) 
    [1] => Array 
     (
      [name] => Test1 
      [mobile] => 
      [email] => [email protected] 
     ) 
    [2] => Array 
     (
      [name] => Test2 
      [mobile] => 613594553 
      [email] => 
     ) 
    [3] => Array 
     (
      [name] => Test3 
      [mobile] => 613594554 
      [email] => [email protected] 
     ) 
) 

чем дисплей

Array 
(
    [0] => Array 
     (
      [name] => Test3 
      [mobile] => 613594554 
      [email] => [email protected] 
     ) 
) 
+0

Я хочу универсальную функцию для того же! Теперь мне нужно вручную проверить, если ($ array [$ index] ['name']) == "", чем unset –

+0

Дубликат http://stackoverflow.com/questions/9681245/filter-multidimensional-arrays – cronoklee

+0

@cronoklee Не совсем. Эта функция удаляет вложенные массивы из исходного массива только в том случае, если весь вложенный массив пуст. Это не то, что ищет OP. –

ответ

1

Уточняя ответ Мартина, вы можете использовать array_filter() для как исходный массив и вложенный массив:

$filtered_array = array_filter($array, function($item){ 
    return count($item) == count(array_filter($item)); 
}); 
sort($filtered_array); // to reindex 

Рабочий пример: https://eval.in/521449

+0

Отлично, это то, что я искал! –

0

Использование array_filter() для перебора всех записей для каждого человека, и удалить те, которые имеют пустое значение. Количество записей до и после array_filter() должно быть равно, если все записи заполнены. Если они не удаляют человека, использующего unset().

Обратите внимание, что эта функция работает на месте, поэтому она изменяет исходный массив.

<?php 

$array = [ 
    [ 
     'name' => 'Test1', 
     'mobile' => 123456789, 
     'email' => null 
    ], [ 
     'name' => 'Test2', 
     'mobile' => 123456789, 
     'email' => '[email protected]' 
    ], [ 
     'name' => null, 
     'mobile' => 123456789, 
     'email' => '[email protected]' 
    ], 
]; 

function removeEmpty(&$arr) { 
    foreach ($arr as $index => $person) { 
     if (count($person) != count(array_filter($person, function($value) { return !!$value; }))) { 
      unset($arr[$index]); 
     } 
    } 
} 

removeEmpty($array); 

print_r($array); 

Печать:

Array 
(
    [1] => Array 
     (
      [name] => Test2 
      [mobile] => 123456789 
      [email] => [email protected] 
     ) 

) 
+1

Это не переиндексирует массив. –

0

Если предположить, что элемент массива может иметь разные ключи:

$array = array(
     0=>array('name'=>'','test'=>2), 
     1=>array('name'=>'sadad','test'=>2), 
     ); 

    foreach($array as $index=>$item) { 
     $keys = array_keys($item); //here is the assumption 
     //you can define it before the foreach 
     //by checking the first array if YOU are 100% sure 
     //all items in the array have the same keys: name, mobile, email 
     foreach($keys as $key) { 
      if(empty($item[$key])) { 
       unset($array[$index]); 
       break; 
      } 
     } 
    } 
var_dump($array); 

Выход:

array(1) { 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(5) "sadad" 
    ["test"]=> 
    int(2) 
    } 
} 
+0

Это не переиндексирует массив. –

+0

Добавить '$ array = array_values ​​($ array);' –

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