Ich habe gerade array_filter verwendet, um Einträge zu entfernen, die nur den Wert '' hatten, und jetzt möchte ich abhängig vom Platzhalter ab 0 bestimmte Transformationen darauf anwenden, aber leider behält es den ursprünglichen Index bei. Ich habe eine Weile gesucht und konnte nichts sehen, vielleicht habe ich nur das Offensichtliche verpasst, aber meine Frage ist ...
Wie kann ich die Indizes des Arrays einfach so zurücksetzen, dass sie bei 0 beginnen und im NEUEN Array in der richtigen Reihenfolge angezeigt werden, anstatt alte Indizes beizubehalten?
array_filter()
- Sie können mehr löschen, als Sie beabsichtigen. Hier ist eine Erklärung mit einer Demo: stackoverflow.com/a/43657056/2943403Antworten:
Wenn Sie
array_values
Ihr Array aufrufen , wird es von Null neu indiziert.quelle
Wenn Sie den Array-Filter verwenden, gehen Sie wie folgt vor
quelle
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:Nullwerte werden unabhängig von Groß- / Kleinschreibung entfernt.
Aber schauen Sie sich an, was im Array verbleibt, wenn wir array_values () & array_filter () verwenden :
Ausgabearray ($ array):
Schauen Sie sich nun an, was Sie mit meiner Methode erhalten, die array_walk () & is_null () verwendet , um ein neues gefiltertes Array zu generieren:
Dies kann zum leichteren Lesen / Erklären über mehrere Zeilen geschrieben werden:
Ausgabearray ($ filter):
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:
oder
oder
oder
Ausgabe:
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.
quelle
array_values(array_filter($arr, function($el) {return $el !== '';}))
? Das scheint der natürliche Weg zu sein, um das zu tun, wonach das OP fragt.array_filter()
sei denn, ihre genaue Kenntnis der Daten erlaubt eine gierige Filterung ohne Nebenwirkungen. (Eine weitere Warnung:empty()
verhält sich auf die gleiche Weise und schließt auch ein leeres Array in seine Gier ein.)array_filter()
verhält sich genau so, wie Sie es erwarten würden, basierend auf den Angaben im Handbuch: php.net/manual/en/function.array-filter.php "Wenn kein Rückruf bereitgestellt wird, sind alle Einträge des Arrays gleich FALSE (siehe Konvertieren in Boolesche Werte) ) wird entfernt. " Und es sollte unter PHP-Programmierern allgemein bekannt sein, dass 0, null, false, '' und '0' alle als false ausgewertet werden, wenn sie zu boolean gezwungen werden.Verwendung
array_values()
:quelle