Hallo Gunnar,
Du meinst vermutlich foreach?
Äh, ja.
Aber auch damit geht’s nicht.
Äh, nein. Man soll nicht zwischen Tür und Angel Forenbeiträge beantworten.
Es muss natürlich so aussehen, wie Tom schrub - bzw. auf die Key=>Value Notation im foreach kann man verzichten, weil's ja kein assoziatives Array ist.
$ships = [
[ 'id' => 'CV-6' , 'name' => 'Enterprise' ],
[ 'id' => 'D52' , 'name' => 'Enterprise' ],
[ 'id' => 'L-5' , 'name' => 'Enterprise' ],
[ 'id' => 'CVN-80' , 'name' => 'Enterprise' ],
[ 'id' => 'NX-01' , 'name' => 'Enterprise' ],
[ 'id' => 'NCC-1701', 'name' => 'Enterprise' ],
[ 'id' => 'XCV-330' , 'name' => 'Enterprise' ] ];
$id = "NX-01";
$name = null;
foreach ($ships as $_ship)
{
if ($_ship[$id] == $id)
{
$name ? $_ship['name'];
break;
}
}
Was ist das für eine Magie mit $_?
Gar keine. Das hab ich als "interne Variable" vor die Schleifenvariablen gemacht. Abrakamööp.
Wenn Du unbedingt mit Callbacks und funktionaler Programmierung arbeiten möchtest, könntest es auch so machen (und es wundert mich eigentlich, dass PHP diese Funktion nicht schon hat):
function array_find($array, $callback)
{
foreach ($array as $key => $entry)
{
if ($callback($entry, $key))
return $entry;
}
return null;
}
$ship = array_find($ships, fn($starship) => $starship['id'] === $id);
$name = $ship['name'] ?? null;
echo "Die $id heißt $name";
Ich halte array_filter für keine gute Idee, weil diese Funktion immer das ganze Array durchläuft. Eine generische Funktion sollte aber immer key und value eines Arrays bereitstellen, und sie sollte den value zuerst in den Callback schieben, damit der den Key nicht deklarieren muss, wenn er nicht interessiert (analog zu Array.prototype.find in JavaScript).
Die Schreibweise $arr['key'] ?? null
ist der null coalescing operator, er verhindert sowohl die Warnung (sic!), die PHP ausgibt, wenn $arr kein Array ist, wie auch die Warnung, dass $arr keinen Key 'name' enthielte.
Rolf
sumpsi - posui - obstruxi