example - php array_filter sin preservación de clave
php array key value (2)
Puede usar array_values después de filtrar para obtener los valores.
si filtro una matriz con array_filter para eliminar los valores nulos, las claves se conservan y esto genera "agujeros" en la matriz. P.ej:
The filtered version of
[0] => ''foo''
[1] => null
[2] => ''bar''
is
[0] => ''foo''
[2] => ''bar''
Cómo puedo obtener, en cambio
[0] => ''foo''
[1] => ''bar''
?
Usando esta entrada:
$array=[''foo'',NULL,''bar'',0,false,null,''0'',''''];
Hay algunas maneras de hacerlo. Demo
Está un poco fuera del tema array_filter el comportamiento predeterminado codicioso de array_filter , pero si está buscando en Google a esta página, esta es probablemente información importante relevante para su proyecto / tarea:
var_export(array_values(array_filter($array))); // NOT GOOD!!!!!
Mala salida:
array (
0 => ''foo'',
1 => ''bar'',
)
Ahora por las formas en que funcionará:
Método n. ° 1 : ( array_values() , array_filter() w / !is_null() )
var_export(array_values(array_filter($array,function($v){return !is_null($v);}))); // good
Método n. ° 2 : ( foreach() , matriz !==null )
foreach($array as $v){
if($v!==null){$result[]=$v;}
}
var_export($result); // good
Método n. ° 3 : ( array_walk() , auto-index array array_walk() !is_null() )
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});
var_export($filtered); // good
Los tres métodos proporcionan el siguiente resultado "nulo":
array (
0 => ''foo'',
1 => ''bar'',
2 => 0,
3 => false,
4 => ''0'',
5 => '''',
)