Ist es möglich mit array_shift() in PHP und Holen Sie sich die Schlüssel?
Habe ich eine Liste von Dateien in einem array, in dem der Dateiname ist der Schlüssel und der Wert ist das Datum der letzten änderung in Sekunden. Sie sind sortiert von alt nach neu.
Werden die Dateien glob()
'd, und dann sortiert, auf diese Weise mit
asort($fileNameToLastModified, SORT_NUMERIC);
Benutze ich array_shift(), um die älteste Datei. Leider scheint es so zu sein, dass Sie mir das Wert, und es scheint nicht ein Weg, um den Schlüssel zu Holen.
Wäre die einzige Möglichkeit, das zu tun, dass so etwas sein?
$keys = array_keys($fileNameToLastModified);
$oldest = array_shift($keys);
array_shift($fileNameToLastModified); //to manually chop the first array member off too.
...oder gibt es eine integrierte Methode, es zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
... sollte den trick tun. Sehen array_splice.
array_keys()
und erhalten ein array-Mitglied. Aber das ist noch ein weiterer Weg, es zu tun, so werde ich es akzeptieren 🙂$result = key(array_splice( $yourArray, 0, 1 ));
?Könnten Sie
each
wie:Durchlaufen des array mit
each
halten die Letzte position.Anderen Ansatz:
... (oder einfach nur
list($key)...
wenn Sie nicht brauchen$value
). Sehen jeder und Liste.Edit: Wie @ztate, wies in seinem Kommentar
each()
- Funktion als veraltet markiert worden, so verlassen in diesem Ansatz nicht mehr eine gute Idee.Aber ich denke, ein ähnliches Verhalten kann erreicht werden, indem die neue
key()
Funktion dieser (ungetestete) Möglichkeit:Each
Funktion wurde gestrichen, da der PHP-7.2.0. Unter Berufung auf diese Funktion dringend abgeraten.key()
,current()
undnext()
. Drei Funktionsaufrufe statt einer (trotz derlist()
nennen, die sicherlich vermieden werden könnten.Könnte man dies auch tun:
Dieser Ausgabe:
Ich bin mir nicht sicher, wie die performance ist, so möchten Sie vielleicht, um einige der Profilierung, aber es ist wahrscheinlich schneller als
array_keys()
für große arrays, da es nicht braucht, die zum Durchlaufen der ganzen Sache.$arr
ich würde sagen, es könnte sein, schrecklich auf großen arrays.foreach()
sollte keine Kopie des Arrays, sicherlich?break
.Können Sie einen Blick auf
key()
,current()
odereach()
. Sie tun, was Sie gefragt haben.Ich bin mir nicht wirklich sicher, wenn Sie wollen, um tatsächlich mehr Schlüssel/Wert-Paare aus dem array danach. Also werde ich nicht in alle Einzelheiten von dem, was Sie sonst noch tun müssen.
Eine weitere Möglichkeit, die kurz arbeiten: