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

Beitrag lesen

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:

function array_findSubkey(iterable $array, string $key, $value)
{
   foreach ($array as $eintrag)
   {
      if ($entry[$key] == $value)
         return $entry;
   }
   return false;
}

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);

Rückgabe von FALSE bei Nichtfinden ist zwar eigentlich Müll, aus meiner Sicht wäre NULL die bessere Idee, aber es ist typisch für PHP in solchen Fällen FALSE zu liefern.

Sowas kann man auch mit einer Callback-Funktion bauen, aber das führt mir jetzt zu weit.

Rolf

--
sumpsi - posui - clusi
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