если я фильтрую массив с array_filter для устранения нулевых значений, ключи сохраняются, и это генерирует «дыры» в массиве. Например:
The filtered version of [0] => 'foo' [1] => null [2] => 'bar' is [0] => 'foo' [2] => 'bar'
Как я могу получить вместо этого
[0] => 'foo' [1] => 'bar'
? благодаря
Вы можете использовать array_values
после фильтрации, чтобы получить значения.
Используя этот вход:
$array=['foo',NULL,'bar',0,false,null,'0',''];
Есть несколько способов сделать это. демонстрация
Это немного не по теме, чтобы вызвать array_filter
поведение по умолчанию, но если вы переходите на эту страницу, это, вероятно, важная информация, относящаяся к вашему проекту / задаче:
var_export(array_values(array_filter($array))); // NOT GOOD!!!!!
Плохой выход:
array ( 0 => 'foo', 1 => 'bar', )
Теперь о том, как это будет работать:
Метод # 1 : ( array_values()
, array_filter()
w / !is_null()
)
var_export(array_values(array_filter($array,function($v){return !is_null($v);}))); // good
Метод # 2 : ( foreach()
, автоиндексированный массив !==null
)
foreach($array as $v){ if($v!==null){$result[]=$v;} } var_export($result); // good
Метод №3 : ( array_walk()
, !is_null()
массив !is_null()
)
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}}); var_export($filtered); // good
,array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}}); var_export($filtered); // good
Все три метода обеспечивают следующий «нулевой» вывод:
array ( 0 => 'foo', 1 => 'bar', 2 => 0, 3 => false, 4 => '0', 5 => '', )