Ich mache mir Sorgen darüber, wie viele Programmierer die array_values(array_filter())
Methode unschuldig in ihre Codes kopiert / eingefügt haben - ich frage mich, wie viele Programmierer aufgrund der Gier von array_filter unabsichtlich auf Probleme gestoßen sind. Oder schlimmer noch, wie viele Leute haben nie entdeckt, dass die Funktion zu viele Werte aus dem Array löscht ...
Ich werde eine bessere Alternative für den zweiteiligen Prozess vorstellen, bei dem NULL
Elemente aus einem Array entfernt und die Schlüssel neu indiziert werden.
Zunächst ist es jedoch äußerst wichtig, dass ich die gierige Natur von array_filter()
betone und wie dies Ihr Projekt stillschweigend zum Schraubenschlüssel machen kann. Hier ist ein Array mit gemischten Werten, das das Problem aufdeckt:
$array=['foo',NULL,'bar',0,false,null,'0',''];
Nullwerte werden unabhängig von Groß- / Kleinschreibung entfernt.
Aber schauen Sie sich an, was im Array verbleibt, wenn wir array_values () & array_filter () verwenden :
array_values(array_filter($array));
Ausgabearray ($ array):
array (
0 => 'foo',
1 => 'bar'
)
// All empty, zero-ish, falsey values were removed too!!!
Schauen Sie sich nun an, was Sie mit meiner Methode erhalten, die array_walk () & is_null () verwendet , um ein neues gefiltertes Array zu generieren:
array_walk($array,function($v)use(&$filtered){if(!is_null($v)){$filtered[]=$v;}});
Dies kann zum leichteren Lesen / Erklären über mehrere Zeilen geschrieben werden:
array_walk( // iterate each element of an input array
$array, // this is the input array
function($v)use(&$filtered){ // $v is each value, $filter (output) is declared/modifiable
if(!is_null($v)){ // this literally checks for null values
$filtered[]=$v; // value is pushed into output with new indexes
}
}
);
Ausgabearray ($ filter):
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => false,
4 => '0',
5 => '',
)
Mit meiner Methode erhalten Sie Ihre neu indizierten Schlüssel, alle Nicht-Null-Werte und keinen der Null-Werte. Ein sauberer, tragbarer und zuverlässiger Einzeiler für alle Ihre Anforderungen an die Nullfilterung von Arrays. Hier ist eine Demonstration .
Wenn Sie leere, falsche und null Elemente entfernen möchten (wobei Nullen beibehalten werden), funktionieren diese vier Methoden ebenfalls:
var_export(array_values(array_diff($array,[''])));
oder
var_export(array_values(array_diff($array,[null])));
oder
var_export(array_values(array_diff($array,[false])));
oder
var_export(array_values(array_filter($array,'strlen')));
Ausgabe:
array (
0 => 'foo',
1 => 'bar',
2 => 0,
3 => '0',
)
Schließlich können Sie für alle, die die Syntax von Sprachkonstrukten bevorzugen, auch einfach qualifizierende Werte in ein neues Array verschieben, um neue Indizes auszugeben.
$array=['foo', NULL, 'bar', 0, false, null, '0', ''];
$result = [];
foreach ($array as $value) {
if (strlen($value)) {
$result[] = $value;
}
}
var_export($result);