Du willst im Kern, dass die ID des Datensatzes der Key des Arrays wird. Das geht einfacher als Du denkst, denn Du denkst, dass das „fürchterlich kompliziert“ sein muss. Es ist aber ganz einfach:
Ich habe eine Datentabelle, die bei der gezeigten Abfrage das folgende Resultat liefert:
MariaDB [test]> select nr, ort, bundesland
-> from geo
-> where nr > 1000
-> LIMIT 5;
+------+---------------------------+--------------------+
| nr | ort | bundesland |
+------+---------------------------+--------------------+
| 1001 | Bermersheim | Rheinland-Pfalz |
| 1002 | Bermersheim vor der Höhe | Rheinland-Pfalz |
| 1003 | Bernau | Baden-Württemberg |
| 1004 | Bernau | Brandenburg |
| 1005 | Bernau am Chiemsee | Bayern |
+------+---------------------------+--------------------+
5 rows in set (0.00 sec)
Diese Datentabelle frage ich in PHP wie folgt:
<?php
$pdo = new PDO('mysql:host=XXXX;dbname=XXXX', 'XXXX', 'XXXX');
$sql='select nr, ort, bundesland
from geo
where nr > 1000
LIMIT 5;';
echo '
-----------------------
# Simple
----------------------
';
$ar = [];
foreach ( $pdo->query( $sql ) as $row ) {
$ar[ $row['nr'] ][ 'ort'] = $row['ort'];
$ar[ $row['nr'] ][ 'bundesland'] = $row['bundesland'];
}
print_r( $ar );
Und wie durch ein kleines Wunder erscheint:
-----------------------
# Simple
----------------------
Array
(
[1001] => Array
(
[ort] => Bermersheim
[bundesland] => Rheinland-Pfalz
)
[1002] => Array
(
[ort] => Bermersheim vor der Höhe
[bundesland] => Rheinland-Pfalz
)
[1003] => Array
(
[ort] => Bernau
[bundesland] => Baden-Württemberg
)
[1004] => Array
(
[ort] => Bernau
[bundesland] => Brandenburg
)
[1005] => Array
(
[ort] => Bernau am Chiemsee
[bundesland] => Bayern
)
)
Das dürfte sein, was Du willst: Die nr
ist der Key des Datentupels im Array.
Wenn man sich aber wünscht, das Resultatobjekt ($stmt
) nicht nur „on the fly“ zu fetchen, sondern auch noch anderweitig zu „befragen“, dann kann man es auch so machen:
<?php
$pdo = new PDO('mysql:host=XXXX;dbname=XXXX', 'XXXX', 'XXXX');
$sql='
select nr, ort, bundesland
from geo
where nr > 1000
LIMIT 5;';
echo '
-----------------------
# Variant
----------------------
';
$ar = [];
$stmt = $pdo->query( $sql );
while ( $row = $stmt->fetch( PDO::FETCH_ASSOC ) ) {
$ar[ $row['nr'] ][ 'ort'] = $row['ort'];
$ar[ $row['nr'] ][ 'bundesland'] = $row['bundesland'];
}
print_r( $ar );
Und „wie durch ein Wunder“ ist das Ergebnis bis auf den Austausch von „Simple“ durch „Variant“ identisch...