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 => '''',
)