Wenn ich ein Array mit array_filter filtere, um Nullwerte zu eliminieren, werden Schlüssel beibehalten und dies erzeugte “Löcher” im Array. Z.B:
The filtered version of
[0] => 'foo'
[1] => null
[2] => 'bar'
is
[0] => 'foo'
[2] => 'bar'
Wie kann ich stattdessen bekommen
[0] => 'foo'
[1] => 'bar'
?
Du könntest benutzen array_values
nach dem Filtern, um die Werte zu erhalten.
Mit dieser Eingabe:
$array=['foo',NULL,'bar',0,false,null,'0',''];
Es gibt ein paar Möglichkeiten, wie Sie könnte Tu es. Demo
Es ist etwas off-topic, es anzusprechen array_filter
‘s gieriges Standardverhalten, aber wenn Sie zu dieser Seite googeln, sind dies wahrscheinlich wichtige Informationen, die für Ihr Projekt/Ihre Aufgabe relevant sind:
var_export(array_values(array_filter($array))); // NOT GOOD!!!!!
Schlechte Ausgabe:
array (
0 => 'foo',
1 => 'bar',
)
Nun zu den Möglichkeiten, die funktionieren:
Methode 1: (array_values()
, array_filter()
mit !is_null()
)
var_export(array_values(array_filter($array,function($v){return !is_null($v);}))); // good
Methode Nr. 2: (foreach()
automatisch indiziertes Array, !==null
)
foreach($array as $v){
if($v!==null){$result[]=$v;}
}
var_export($result); // good
Methode Nr. 3: (array_walk()
Auto-Index-Array, !is_null()
)
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});
var_export($filtered); // good
Alle drei Methoden liefern die folgende “nullfreie” Ausgabe:
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => false,
4 => '0',
5 => '',
)
Ab PHP7.4 können Sie sogar ein “Umpacken” wie folgt durchführen: (der Splat-Operator erfordert numerische Tasten)
Code: (Demo)
$array = ['foo', NULL, 'bar', 0, false, null, '0', ''];
$array = [...array_filter($array)];
var_export($array);
Ausgabe:
array (
0 => 'foo',
1 => 'bar',
)
… aber wie sich herausstellt, ist das “Umpacken” mit dem Splat-Operator weitaus weniger effizient als das Anrufen array_values()
.
Mögliches Duplikat von After array_filter(), wie kann ich die Tasten zurücksetzen, um in numerischer Reihenfolge beginnend bei 0 zu gehen
– ggorlen
28. Januar 2019 um 21:51 Uhr