Array auslesen
bearbeitet von
Lieber Mathias,
> Ich brauche quasi so etwas wie eine Datenbankabfrage für eine Array.
ist das so? Mir kommt es eher so vor, dass Deine Unter-Arrays in Wirklichkeit Objekte mit Eigenschaften sein möchten. Zumindest kannst Du das einigermaßen nachbilden, indem die Indizes (nicht „Indexe“, bitte!) vernünftige Bezeichner bekommen, anstatt Zahlenwerte:
~~~ php
$test = [
[
'level' => 1,
'name' => 'abc',
'message' => 'hallo',
'availabilitiy' => 'morgen',
'amount' => 100,
'date' => '2025-10-03'
],
[
'level' => 3,
'name' => 'abcd',
'message' => 'hallo22',
'availabilitiy' => 'morgen',
'amount' => 200,
'date' => '2025-10-03'
]
};
~~~
Jetzt kannst Du die Indizes `message`, `availability`, `amount` und `date` gezielt auf bestimmte Werte hin untersuchen:
~~~ php
$condition = [
'level' => 3,
'name' => 'abcd'
];
$found = [];
$wanted_properties = [
'message' => 'Nachricht',
'availabilitiy' => 'Verfügbarkeit',
'amount' => 'Menge',
'date' => 'Datum'
];
foreach ($test as $index => $entry) {
$matches = true; // erwarte passenden Eintrag
foreach (array_keys($condition) as $property) {
if ($entry[$property] != $condition[$property]) {
$matches = false;
}
}
if ($matches) {
// In $entry steht ein gesuchter Eintrag von $test: $test[$index]
$wanted_data = [];
foreach (array_keys($wanted_properties) as $property) {
$wanted_data[$property] = $entry[$property];
}
$found[] = $wanted_data;
}
}
~~~
Um also zu entscheiden, ob die Arrays in `$test` Deinen Kriterien genügen, packst Du diese in ein Beispiel-Array `$condition`, um dann dessen Schlüssel-Wert-Paare mit Deinen echten Arrays zu vergleichen. Wenn alles passt, ist die Variable `$matches` noch immer `true` und Du kannst nun damit anstellen, was Du willst. Hier wird ein neues Array mit genau den Indizes gebaut, die in `$wanted_properties` festgelegt werden. Das so neu gebaute Array kommt in eine Trefferliste `$found`.
Womit wir beim eigentlichen Thema wären: Was genau willst Du eigentlich(!) erreichen? Deine Problemstellung war eine technische, von der nicht klar ist, ob der Weg dazu überhaupt der beste für Dein Vorhaben ist. Beschreibe also gerne mehr, dann kann man Dir bessere Vorschläge machen!
In meinem Fall sind solche Trefferlisten wie die oben erstellte nicht gut genug. Wenn es um Inhalte geht, die ich aus einer Menge an Daten filtere, will ich immer den originalen Datensatz verfügbar haben. Die oben neu erstellten Arrays sind also genau das, was ich nicht haben möchte. Lieber ist es mir, später z.B. bei der Ausgabe die für die Anzeige notwendigen Eigenschaften (hier Indices) wie im Array `$wanted_properties` aus dem ursprünglichen Datensatz zu verwenden:
~~~ php
$found = []; // tun wir so, als ob dort Arrays von $test drin stehen
foreach ($found as $entry) {
foreach ($wanted_properties as $property => $display_name) {
echo $display_name, ': ', $entry[$property];
}
}
~~~
Liebe Grüße
Felix Riesterer