Hallo Bernhard,
Auge schreibt:
Nein. Es sollte, wenn dann, schon
$ausgabe[n][231]['titel']
sein.
Ich nehme an, dass das [n] ein Irrtum war und da nicht hingehört. Aber dieses [0], das Du dazwischen hast, ist den speziellen Gegebenheiten von FETCH_GROUP geschuldet - es liefert Gruppen und die können nun mal mehr als einen Eintrag haben - und für dieses Szenario völlig okay.
FETCH_GROUP kann für Dich eine gute Lösung sein. Die Aufgabe, den richtigen Satz herauszusuchen, löst sich dann in einer Programmzeile selbst, und Du brauchst nichts weiter zu programmieren.
Man könnte natürlich auch fragen: Wenn Du schon weißt, welche ID Du brauchst, warum baust Du die Query nicht gleich passend und überlässt das Problem der Datenbank? Aber ich nehme mal an, dass Du Gründe dafür hast.
Wenn Du sicher bist, dass Du keine zwei Sätze mit gleichem Wert für die ID hast, hätte ich noch zwei Alternativen für Dich.
(1) Du könntest Dir beim Einlesen des Abfrageergebnisses etwas mehr Mühe machen und statt fetchAll eine Schleife programmieren, die das Ergebnis Row für Row einliest. Dann kannst Du das Ausgabe-Array sofort mit der id indexiert erzeugen.
$ok = $statement->execute();
if (!ok) { // Fehlerbehandlung }
$ausgabe = ARRAY();
while ($row = $statement->fetch(PDO::FETCH_ASSOC)
{
$ausgabe[$row['id']] = $row;
}
// und dann:
$content = $ausgabe[231]['content'];
(2) Du könntest Dir eine allgemeine Hilfsfunktion schreiben, die Dir ein Array aus Datenbank-Rows nach einer eindeutigen Spalte indexiert. Da gibt es leider nichts Fertiges in der Library.
function array_index($array, $keyColumn) {
if (!is_array($array))
return false;
$ergebnis = ARRAY();
foreach ($array as $eintrag)
{
$ergebnis[$eintrag[$keyColumn]] = $eintrag;
}
return $ergebnis;
}
...
$ausgabe = array_index($statement->fetchAll(PDO::FETCH_ASSOC)), 'id');
Oder Du machst es so wie in meiner ersten Antwort beschrieben und lässt eine Suchschleife über das Ergebnis laufen. Entweder selbst programmiert, oder als Teil von array_filter.
Rolf
sumpsi - posui - obstruxi