Hello Gunnar,
ist das das einzige Subelement im Array, über das Du etwas wissen willst?
Ja.
Und definiere bitte "letzter Eintrag" etwas genauer.
Die Arrayelemente sind schon chronologisch sortiert.
Das ist bei PHP-"Arrays" eine sehr gewagte Aussage.
Wenn man nach dem Key geht, muss man unterscheiden, ob er numerisch, alphanumerisch, oder kombiniert (also sowohl numerische, als auch alphanumerische Schlüssel) enthält.
Wenn man die (virtuelle) Baumstruktur mit next(), foreach(), oder ähnlichen Funktionen abläuft. dann kann man unter gewissen Umständen davon ausgehen, dass die Elemente chronologisch in den Teilketten (Subarrays) eingetragen werden, aber nur dann, wenn der jeweilige Key nicht schon vorhanden war. Dann würde das Element nämlich überschrieben werden.
Ich will das neueste mit haben, für das
datePublished
gesetzt ist, d.h. den neuesten Wert vondatePublished
im Array.
Ich nehme jetzt mal dein Beispiel, aber als "normales" Array und zerlege das in verständliche Einzelschritte:
<?php
$_list = array(); ## leere Liste erzeugen
$_record = array(); ## leeren Datensatz bereitstellen
$_record['name'] = 'The Next Generation';
$_record['datePublished'] = '2023-02-16';
$_list[] = $_record; ## Datensatz an Liste anfügen
$_record = array(); ## leeren Datensatz bereitstellen
$_record['name'] = 'Disengage';
$_record['datePublished'] = '2023-02-13';
$_list[] = $_record; ## Datensatz an Liste anfügen
$_record = array(); ## leeren Datensatz bereitstellen
$_record['name'] = 'Seventeen Seconds';
$_list[] = $_record; ## Datensatz an Liste anfügen
$_record = array(); ## leeren Datensatz bereitstellen
$_record['name'] = 'No Win Scenario';
$_list[] = $_record; ## Datensatz an Liste anfügen
$_record = array(); ## leeren Datensatz bereitstellen
$_record['name'] = 'Imposter';
$_list[] = $_record; ## Datensatz an Liste anfügen
$_record = array(); ## leeren Datensatz bereitstellen
$_record['name'] = 'Bounty';
$_list[] = $_record; ## Datensatz an Liste anfügen
echo "<pre>\r\n";
print_r($_list);
?>
Das Obige verpackt man dann für den dynamischen Fall besser in einer Funktion. Wenn es tatsächlich eine Konstante werden soll, kann man das natürlich so ähnlich, wie Du es schon angedeutet hast in den Quellcode schreiben, ist aber hässlich.
Ergibt folgende Ausgabe:
Array
(
[0] => Array
(
[name] => The Next Generation
[datePublished] => 2023-02-16
)
[1] => Array
(
[name] => Disengage
[datePublished] => 2023-02-13
)
[2] => Array
(
[name] => Seventeen Seconds
)
[3] => Array
(
[name] => No Win Scenario
)
[4] => Array
(
[name] => Imposter
)
[5] => Array
(
[name] => Bounty
)
)
Da das Array durch die Art der Eingabe (implizites array_push() mit reinem numerischen Schlüssel in der obersten Ebene erweitert wurde, liegen die Elemente automatisch in der Reihenfolge der Eintragung vor, egal, ob man das Array nach dem Key, oder mittels der "Baumfunktionen" abfragt.
Du kannst das Array jetzt mit foreach() iterieren:
$datePublished = '';
$foundKey = NULL;
foreach($_list as $key => $_record)
{
if (isset($_record['datePublished']) && ($_record['datePublished'] > $datePublished))
{
$foundKey = $key;
$datePublished = $_record['datePublished'];
}
}
print_r($_list[$foundKey]);
ergibt dann die Ausgabe:
Array
(
[name] => The Next Generation
[datePublished] => 2023-02-16
)
Du könntest das Array auch museumsmäßig nach den Keys iterieren, da diese hier alle vorhanden sein müssen. Wenn aber mal ein Record aus dre Liste gelöscht wurde, fehlt der Key. Dann gibt's Tüddel.
Also besser foreach() benutzen.
Glück Auf
Tom vom Berg