Raketensimplifizierungsbeauftragter: Du denkst offenbar, es müsse kompliziert sein... Muss es aber nicht: Beispiel

Beitrag lesen

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...

0 56

Array, Bezeichner - Name des Arrayfeldes von einer Zahl auf einen Namen ändern

Manfred
  • php
  1. -1
    pl
    1. 2
      Rolf B
      1. 0
        Manfred
        1. 0
          Der Martin
        2. 0
          pl
  2. 0
    Raketenwissenschaftler
  3. 0
    dedlfix
  4. 1
    Tom mobil
    1. 0
      Raketengeschichtenerzähler
      1. 0
        Tom mobil
        • zur info
        1. 0
          Raketengeschichtenerzähler
          1. 0
            pl
            1. 0
              Rolf B
  5. 0

    Array direkt ausgeben ---> Array[][0]['inhalt']

    Manfred
    1. 0
      Raketenhandbuchvorleser
    2. 0
      Der Martin
      1. 0
        Manfred
        1. 0
          Rolf B
        2. 1
          Rolf B
          1. 0

            Array direkt ausgeben ---> Array[1]['inhalt'] möchte aber id 17

            Manfred
            1. 0
              Tabellenkalk
              1. 0

                fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC); -> Ein Array zuviel

                Manfred
                1. 1
                  Raketenerklärbär
                  1. 0

                    Du denkst offenbar, es müsse kompliziert sein... Muss es aber nicht: Beispiel

                    Raketensimplifizierungsbeauftragter
                2. 0
                  Rolf B
                3. 0
                  pl
            2. 0
              1unitedpower
              1. 0
                Rolf B
                1. 0
                  1unitedpower
                  1. 0
                    Der Martin
                    1. 0
                      1unitedpower
                    2. 0
                      Matthias Apsel
                    3. 1
                      MudGuard
                      • menschelei
                  2. 0
                    Rolf B
                    1. 0
                      1unitedpower
                      1. 0
                        Der Martin
                        1. 0
                          Tabellenkalk
                          • sonstiges
                          1. 0
                            Der Martin
                            1. 0
                              Auge
                              1. 0
                                MudGuard
                                1. 0
                                  Auge
                                  1. 0
                                    Tabellenkalk
                            2. 0
                              Rolf B
                              1. 0
                                Der Martin
                      2. 0
                        Tom mobil
                        • php
                        • programmiertechnik
                        • programmiertechnik
                        1. 0
                          Matthias Apsel
                          1. 0
                            Tom (unreg)
                  3. 0
                    Tom mobil
                2. 0
                  Felix Riesterer
            3. 0
              Rolf B
            4. -1
              pl
        3. 1
          Tabellenkalk
    3. 0
      Tabellenkalk
  6. 0
    Felix Riesterer
    1. 0
      Manfred