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

этот вопрос уже есть ответ здесь:

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

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

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

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

Я пробовал:

$aryMain = array_filter($aryMain);  

но он не работает : (

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

3 ответов


добавить к Rikesh ответ:

<?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); 
} 

демо.

Примечание: это удалит элементы, содержащие " 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);
});

является ли это более эффективным, можно спорить, но он должен сохранить некоторую память:)