Array direkt ausgeben ---> Array[1]['inhalt'] möchte aber id 17
bearbeitet von
Hallo Manfred,
ah ok, ich habe dich falsch verstanden.
Wie Tabellenkalk schrieb - da hilft nur sequenziell durchsuchen oder das Array anders aufbauen.
Statt
~~~
Array
(
[0] => Array
(
[id] => 28
[inhalt] => 0
)
[1] => Array
(
[id] => 42
[inhalt] => 999
)
)
~~~
böte sich eine der beiden folgenden Lösungen an:
~~~
Array
(
[17] => 0
[42} => 000
)
~~~
oder
~~~
Array
(
[28] => Array
(
[id] => 28
[inhalt] => 0
)
[42] => Array
(
[id] => 42
[inhalt] => 999
)
)
~~~
die zweite Lösung ist dann interessant, wenn es außer id und inhalt noch weitere Schlüssel in den Subarrays gibt.
Die Frage ist natürlich, wo das Array herkommt. Falls Du es selbst aufbaust oder zeilenweise mit fetch aus einer Datenbank liest, kannst Du gleich die id als Schlüssel setzen. Wenn es das Ergebnis einer Datenbankanfrage mit fetchAll ist, musst Du es transformieren oder den fetchAll in eine fetch-Schleife umbauen.
Was bringt es?
Wenn die ID der Schlüssel des äußeren Arrays ist, greifst Du einfach mit `$array[17]` oder `$array[$id]` auf eine beliebige ID zu.
Der Umbau lohnt zumeist aber nur, wenn Du mehrere Suchen auf diesem Array ausführen musst. Wenn du für einen Webrequest nur eine Suche brauchst, ist es vermutlich lohnender, eine Suchschleife zu programmieren, die eine Zeile heraussucht, in der ein Schlüssel einen bestimmten Wert hat. Sowas kann man in eine Funktion auslagern:
~~~php
function array_findSubkey(iterable $array, string $key, $value)
{
foreach ($array as $eintrag)
{
if ($entry[$key] == $value)
return $entry;
}
return null;
}
~~~
Es gibt zwar schon eine Menge Array-Funktionen in PHP, aber so eine nicht. Sie findet in Arrays, die so wie deins strukturiert sind, den ersten Eintrag wo der angegebene Schlüssel einen bestimmten Wert hat. Du rufst sie so auf:
~~~
$zeile = array_findSubkey($myArray, 'id', 17);
~~~
Sowas kann man auch mit einer Callback-Funktion bauen, aber das führt mir jetzt zu weit.
_Rolf_
--
sumpsi - posui - clusi
Array direkt ausgeben ---> Array[1]['inhalt'] möchte aber id 17
bearbeitet von
Hallo Manfred,
ah ok, ich habe dich falsch verstanden.
Wie Tabellenkalk schrieb - da hilft nur sequenziell durchsuchen oder das Array anders aufbauen.
Statt
~~~
Array
(
[0] => Array
(
[id] => 28
[inhalt] => 0
)
[1] => Array
(
[id] => 42
[inhalt] => 999
)
)
~~~
böte sich eine der beiden folgenden Lösungen an:
~~~
Array
(
[17] => 0
[42} => 000
)
~~~
oder
~~~
Array
(
[28] => Array
(
[id] => 28
[inhalt] => 0
)
[42] => Array
(
[id] => 42
[inhalt] => 999
)
)
~~~
die zweite Lösung ist dann interessant, wenn es außer id und inhalt noch weitere Schlüssel in den Subarrays gibt.
Die Frage ist natürlich, wo das Array herkommt. Falls Du es selbst aufbaust oder zeilenweise mit fetch aus einer Datenbank liest, kannst Du gleich die id als Schlüssel setzen. Wenn es das Ergebnis einer Datenbankanfrage mit fetchAll ist, musst Du es transformieren oder den fetchAll in eine fetch-Schleife umbauen.
Was bringt es?
Wenn die ID der Schlüssel des äußeren Arrays ist, greifst Du einfach mit `$array[17]` oder `$array[$id]` auf eine beliebige ID zu.
Der Umbau lohnt zumeist aber nur, wenn Du mehrere Suchen auf diesem Array ausführen musst. Wenn du für einen Webrequest nur eine Suche brauchst, ist es vermutlich lohnender, eine Suchschleife zu programmieren, die eine Zeile heraussucht, in der ein Schlüssel einen bestimmten Wert hat. Sowas kann man in eine Funktion auslagern:
~~~php
function array_findSubkey($array, $key, $value)
{
foreach ($array as $eintrag)
{
if ($entry[$key] == $value)
return $entry;
}
return null;
}
~~~
Es gibt zwar schon eine Menge Array-Funktionen in PHP, aber so eine nicht. Sie findet in Arrays, die so wie deins strukturiert sind, den ersten Eintrag wo der angegebene Schlüssel einen bestimmten Wert hat. Du rufst sie so auf:
~~~
$zeile = array_findSubkey($myArray, 'id', 17);
~~~
Sowas kann man auch mit einer Callback-Funktion bauen, aber das führt mir jetzt zu weit.
_Rolf_
--
sumpsi - posui - clusi