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);
});
является ли это более эффективным, можно спорить, но он должен сохранить некоторую память:)