Intereting Posts

PHP: удалить пустые строки массива в многомерном массиве

У меня есть этот массив:

$aryMain = array(array('hello','bye'), array('',''),array('','')); 

Он формируется путем чтения файла csv, а массив ('', '') – это пустые строки в конце файла.

Как я могу их удалить?

Я пробовал:

 $aryMain = array_filter($aryMain); 

Но это не работает 🙁

Большое спасибо!

Чтобы добавить к ответу Рикеша:

 <?php $aryMain = array(array('hello','bye'), array('',''),array('','')); $aryMain = array_filter(array_map('array_filter', $aryMain)); print_r($aryMain); ?> 

Приклеивание его кода в другой файл array_filter избавится от всех массивов.

 Array ( [0] => Array ( [0] => hello [1] => bye ) ) 

В сравнении с:

 $aryMain = array_map('array_filter', $aryMain); Array ( [0] => Array ( [0] => hello [1] => bye ) [1] => Array ( ) [2] => Array ( ) ) 

Используйте array_map вместе с array_filter,

 $array = array_filter(array_map('array_filter', $array)); 

Или просто создайте функцию array_filter_recursive

 function array_filter_recursive($input) { foreach ($input as &$value) { if (is_array($value)) { $value = array_filter_recursive($value); } } return array_filter($input); } 

DEMO.

Обратите внимание: это приведет к удалению элементов, содержащих «0» (т.е. строку с нулевой цифрой). Просто передайте 'strlen' в качестве второго параметра, чтобы сохранить 0

Примените array_filter() к основному массиву, а затем еще раз о внутренних элементах:

 $aryMain = array_filter($aryMain, function($item) { return array_filter($item, 'strlen'); }); 

Внутренний array_filter() специально использует strlen() чтобы определить, является ли элемент пустым; иначе он удалит '0' .

Чтобы определить пустоту массива, вы также можете использовать array_reduce() :

 array_filter($aryMain, function($item) { return array_reduce($item, function(&$res, $item) { return $res + strlen($item); }, 0); }); 

Является ли это более эффективным, спорным, но он должен сэкономить память 🙂