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

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
                        • error
                        • php
                        • 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

Und ich nage immer noch an meinem ARRAY.

ich schreibe einen weitere Wert in mein bestehendes ARRAY

foreach ($mein_array as $nr => $inhalt)
	{
	array_push($mein_array[$nr], "Inhalt");
	}	


Array
(
    [0] => Array
        (
            [id] => 18
            [titel] => test
            [0] => Inhalt
        )

Wie kann ich dem Bezeichner, der 0 einen Namen zuordnen?

  1. Mach's doch mal schön nacheinander. Das Arrayelement was an das große ARRAY dran soll ist selbst auch ein Array:

    $hunt = array(
      'id'    => 18,
      'titel' => 'test',
      'bezei' => 'Inhalt'
    )
    

    Und das pappst Du jetzt an das große Array unten dran:

    array_unshift($ARRAY, $hunt);
    

    Kontrolle mit print_r() und mit array_shift() ziehst Du es wieder da raus. MFG

    1. Hallo pl,

      Manfreds Problem ist, dass er nicht weiß, wie er 'bezei' => 'Inhalt' in sein existierendes Array hinein bekommt. Das große Array ist ja schon da (als Ergebnis einer DB-Abfrage, wenn ich mich recht erinnere).

      Was Manfred braucht, ist die Info, dass man Array-Einträge mit einem String als Index einfach zuweisen kann.

      foreach ($mein_array as $nr => $inhalt)
      {
         $mein_array[$nr]["name"] = "Inhalt";
      }
      

      Ergebnis wäre dann

      Array
      (
          [0] => Array
              (
                  [id] => 18
                  [titel] => test
                  [name] => Inhalt
              )
      

      Rolf

      --
      sumpsi - posui - clusi
      1. Ja genau.

        so habe ich es jetzt hinbekommen (ganz schön umstenädlich, wenn ich mir das andere so ansehe):

        $mein_array[$nr]= array_merge($mein_array[$nr], array('name' => 'inhalt'));

        aber ich denke das ist doch etwas eleganter:

        $mein_array[$nr]["name"] = "Inhalt";

        1. Hallo,

          so habe ich es jetzt hinbekommen (ganz schön umstenädlich, wenn ich mir das andere so ansehe):

          $mein_array[$nr]= array_merge($mein_array[$nr], array('name' => 'inhalt'));
          

          das geht, ist aber unnötig umständlich. Warum nicht direkt zuweisen, wenn es nur ein zusätzliches Element ist?

          $mein_array[$nr]["name"] = "Inhalt";
          

          Genau so.

          Ciao,
           Martin

          --
          Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
        2. Entscheidend ist doch, wie Du mit Array's zukünftig zurechtkommst. Und genau dafür hat PHP zwei Dumper: print_r() und var_dump(). Damit kann man sich seine Array's im Zweifelsfalle angucken.

          MFG

  2. Ich weiß nicht ganz genau, was Du erreichen willst, aber vielleicht ist es das hier:

    <?php
    $arr[3]['id']    = 18;
    $arr[3]['titel'] = 'test';
    $arr[1]['id']    = 19;
    $arr[1]['titel'] = 'test';
    
    foreach ( $arr as $nr => $inhalt )
    {
    	$arr[$nr]['foo'] = 'Inhalt';
    }
    print_r( $arr );
    

    Ausgaben:

    Array
    (
        [3] => Array
            (
                [id] => 18
                [titel] => test
                [foo] => Inhalt
            )
    
        [1] => Array
            (
                [id] => 19
                [titel] => test
                [foo] => Inhalt
            )
    
    )
    

    Anstelle von 'foo' und 'Inhalt' können natürlich Variablen oder andere Ausdrücke stehen.

  3. Tach!

    Eine allgemeine Betrachtung:

    Arrays in PHP sind weitaus mehr, als Arrays anderenorts. Insbesondere mischt PHP in seinen Array-Typ einfache Auflistungen von Werten (über ihre Position ansprechbar) und assoziative Datensammlungen, wie Maps oder Dictionarys.

    array_push() ist eine der Funktionen, die mit den erstgenannten Auflistungen umgehen können, aber nicht mit assoziativen Arrays.

    Beide haben jedoch als Gemeinsamkeit, dass über die eckigen Klammern auf die Elemente zugegriffen werden kann, und das nicht nur lesend, sondern auch schreibend und hinzufügend. Wie das geht, wurde schon in den anderen Postings gezeigt. Zur einfachen Array-Manipulation solltest du die Eckige-Klammern-Syntax vor Funktionen bevorzugen.

    dedlfix.

  4. Hello,

    ### Element unter den gewünschten Namen kopieren
    $_meinArray['elementname'] = $_meinArray[0];
    
    ### Altes Element aus dem Array entfernen
    unset($_meinArray[0]);
    

    Glück Auf Tom mobil

    1. ### Element unter den gewünschten Namen kopieren
      $_meinArray['elementname'] = $_meinArray[0];
      
      ### Altes Element aus dem Array entfernen
      unset($_meinArray[0]);
      

      Hm. Das hat ein wenig davon, wie einst der Wartburg gebaut wurde:

      Blieb die Lieferung von $Teil aus, dann wurden die Autos am Fließband mit Exemplaren von $Teil gebaut, dann wurde $Teil in der Werkstatt wieder ausgebaut, um es für die Fließbandproduktion zur verfügung zu haben, und, wenn dann die Lieferung von $Teil reinkam wurden diese in die auf dem Hof stehenden Fahrzeuge wieder eingebaut…

      1. Hello Jörg,

        ### Element unter den gewünschten Namen kopieren
        $_meinArray['elementname'] = $_meinArray[0];
        
        ### Altes Element aus dem Array entfernen
        unset($_meinArray[0]);
        

        Hm. Das hat ein wenig davon, wie einst der Wartburg gebaut wurde:

        Blieb die Lieferung von $Teil aus, dann wurden die Autos am Fließband mit Exemplaren von $Teil gebaut, dann wurde $Teil in der Werkstatt wieder ausgebaut, um es für die Fließbandproduktion zur verfügung zu haben, und, wenn dann die Lieferung von $Teil reinkam wurden diese in die auf dem Hof stehenden Fahrzeuge wieder eingebaut…

        War das jetzt versteckte Sachkritik an meinem Vorschlag, der sich an der Überschrift orientiert hat, oder eine Humoreinlage mit History-Aspekt?

        Glück Auf Tom mobil

        1. War das jetzt versteckte Sachkritik an meinem Vorschlag, der sich an der Überschrift orientiert hat, oder eine Humoreinlage mit History-Aspekt?

          Humoreinlage mit History-Aspekt, die sich im Hinblick auf den, an der Überschrift orientierten, Beitrag aufdrängte.

          1. War das jetzt versteckte Sachkritik an meinem Vorschlag, der sich an der Überschrift orientiert hat, oder eine Humoreinlage mit History-Aspekt?

            Humoreinlage mit History-Aspekt, die sich im Hinblick auf den, an der Überschrift orientierten, Beitrag aufdrängte.

            Mit dem Unterschied, daß $Teile heute nicht von Eisenach nach Hainichen reisen sondern um die ganze Welt. Und zwar in Plastikfolie eingeschweißt.

            MFG

            1. Hallo pl,

              Und zwar in Plastikfolie eingeschweißt.

              Damit die Corona-Viren auch heile ans Ziel kommen!

              Rolf

              --
              sumpsi - posui - clusi
  5. Langsam bekomme ich graue Haare, ich lese über alle wie man ein Array ansteuert, aber ich bekomme es wenn es nicht in einer Schleife ist nicht hin . Ich versuche

    Array[][0]['inhalt'] direkt auszugeben

    Array
    (
        [0] => Array
            (
                [id] => 28
                [inhalt] => 0
            )
    
    

    Manfred

    1. Array[][0]['inhalt'] direkt auszugeben.

      Das kann nichts werden weil die Syntax Array[]=value ein neues Element erzeugen will.

      Du willst wahrscheinlich

      echo Array[0]['inhalt'];
      
    2. Hallo,

      Langsam bekomme ich graue Haare

      über das Stadium bin ich hinaus; ich hab sie teilweise schon.

      ich lese über alle wie man ein Array ansteuert, aber ich bekomme es wenn es nicht in einer Schleife ist nicht hin . Ich versuche

      Array[][0]['inhalt'] direkt auszugeben

      Was willst du mit den leeren Indexklammern andeuten?

      Array
      (
          [0] => Array
              (
                  [id] => 28
                  [inhalt] => 0
              )
      
      

      Und $array[0]['inhalt'] genügt nicht?

      Ciao,
       Martin

      --
      Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
      1. Leider Nein Martin und Raketenhandbuchvorleser /was für ein Name 😀 )

        also mit

        Array[0]['inhalt'];

        bekomme ich den Inhalt von 0

        ich möchte aber

        Array
        (
            [0] => Array
                (
                    [id] => 28
                    [inhalt] => 0
                )
        

        den Inhalt von id=28 haben

        1. Hallo Manfred,

          na dann sag's deinem PHP doch.

          Denkhilfe: die Index Angaben in den eckigen klammern geben an, welchem Pfeil in der var_dump oder print_r Ausgabe zu folgen ist

          Rolf

          --
          sumpsi - posui - clusi
        2. Hallo Manfred,

          also mit Array[0]['inhalt']; bekomme ich den Inhalt von 0

          Das ist missverständlich formuliert, gerade wenn es um Arrays geht. "Der Inhalt von 0" würde man mit "Inhalt des Arrays an der Indexposition 0" verbinden.

          Wenn das hier ein print_r von $array ist:

          dann bezeichnet in PHP

          $array - den roten Pfeil $array[0] - den blauen Pfeil $array[0]['inhalt'] - den grünen Pfeil

          Was musst Du also schreiben, um an den Wert von 'id' heranzukommen?

          Rolf

          --
          sumpsi - posui - clusi
          1. Ich denke ich drücke mich komisch aus, aber ich gebe nicht auf 😡

            ich verstehe schon wenn ich

            Array[1]['inhalt'];

            schreibe erhalte ich den INHALT, also in meinem Beispiel 42

            wenn ich aber nur weis das ich den array mit der ID 17 ansprechen will.

            1. Hallo,

              wenn ich aber nur weis das ich den array mit der ID 17 ansprechen will.

              Dann ist dein verschachteltes Array für diese Fragestellung ungünstig aufgebaut. Du müsstest in einer Schleife das äußere Array durchgehen und jeweils gucken, ob im inneren Array eine Variable ID mit dem Wert 17 vorhanden ist.

              Sinnvollerweise baust du aber das Array so auf, dass du das gesuchte Array im äußeren Array mit der 17 ansprechen kannst.

              Gruß
              Kalk

              1. Ich glaube die Idee, das Arry anderes zusammenzubauen ist richtig.

                ich baue mein ARRAY nun anderes auf

                $array = $stmt->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);

                aber jetzt habe ich eine ARRAY zuviel...

                Kann das0 Array nicht in das Aarry mit der ID eingebunden werden?

                Array
                (
                    [29] => Array
                        (
                            [0] => Array
                                (
                                    [titel] => eigene Mittel
                                    [inhalt] => 2343434
                                )
                
                        )
                
                    [30] => Array
                        (
                            [0] => Array
                                (
                                    [titel] => Mittel Mitgesellschafter
                                    [inhalt] => 2323432
                                )
                
                        )
                
                1. Ich habe jetzt nicht alles gelesen … aber folgende Frage scheint auf:

                  Warum PDO::FETCH_GROUP?

                  Das ist irgendwie als würdest Du Dich wundern, dass Du Kaffee mit Milch und Zucker bekommst nachdem Du „Kaffee komplett“ bestellt hast.

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

                2. Hallo Manfred,

                  nun hab ich was gelernt - FETCH_GROUP kannte ich noch gar nicht.

                  Aber ich kann verstehen, warum PHP das so macht, es kann ja nicht wissen dass deine Gruppierschlüssel eindeutig sind und legt darum pro Schlüssel ein Array an.

                  Es gibt noch FETCH_KEY_PAIR, aber dieser Modus ist für Queries mit zwei Spalten vorgesehen, von denen einer KEY und die ander VALUE ist.

                  Du könntest mal probieren, PDO:FETCH_UNIQUE zu verwenden. Das kannte ich bisher auch nicht, habe es aber gerade beim Nachlesen von FETCH_GROUP gefunden. Das Handbuch ist nicht sehr ausfühlich dazu, aber hier ist ein Beispiel. Es scheint genau das zu liefern, was Du willst; du musst nur die Query so schreiben dass die ID die erste Spalte ist.

                  Rolf

                  --
                  sumpsi - posui - obstruxi
                3. Nun, der Fetchmodus richtet sich nach der Verarbeitung der gewonnenen Datenstrukturen. PDO::FETCH_ASSOC ist sozusagen der Allrounder weil die Werte direkt addressierbar sind und weil auch jede TemplateEngine die Daten in dieser Struktur zum rendern haben will.

                  Man kann sogar noch einen Schritt weiter gehen und grundsätzlich alles mit fetchAll() aus der DB holen auch dann wenn man nur einen Datensatz erwartet. Was den Vorteil hat, daß man seinen Code insofern vereinheitlichen kann weil die Datenstrukturen stets dieselben sind.

                  MFG

            2. wenn ich aber nur weis das ich den array mit der ID 17 ansprechen will.

              Das geht dann nicht so einfach über die eckigen Klammern. Für den Fall kannst du dir eine Hilfsfunktion schreiben, die dir aus dem Array den Eintrag mit einer bestimmten ID holt.

              function firstById(int $id, iterable $list) : array {
                 foreach ($list as $entry) {
                     if ($entry['id'] === $id) {
                         return $entry;
                     }
                 }
                 throw new Exception('Not found.');
              }
              

              Du kannst du die Funktion so aufrufen:

              $entry = firstById(17, $array);
              $inhalt = $entry['inhalt'];
              

              Du müsstest dir dann noch Gedanken über den Fall machen, dass es keinen Eintrag mit der ID gibt.

              1. Hallo 1unitedpower,

                2 dumme 1 gedanke :)

                Ich würde aber tatsächlich das Array als 1. Parameter nehmen, weil die übrigen Array-Funktionen von PHP das auch so handhaben.

                Bei Nichtfinden eine Exception zu werfen ist eigentlich auch unerwartet - ich würde FALSE zurückgeben, das ist zwar konzeptionell idiotisch, aber idiomatisch für PHP (warum sind die beiden Worte nur so ähnlich). Meinen Beitrag unten, wo ich zuerst NULL geschrieben habe, ändere ich noch.

                Rolf

                --
                sumpsi - posui - clusi
                1. Hallo 1unitedpower,

                  2 dumme 1 gedanke :)

                  Ich würde aber tatsächlich das Array als 1. Parameter nehmen, weil die übrigen Array-Funktionen von PHP das auch so handhaben.

                  PHP ist da leider nicht konsistent, siehe z.B. array_map oder in_array. Aber ja, die Mehrheit der Funktionen scheint das Array als ersten Parameter entgegen zu nehmen.

                  Bei Nichtfinden eine Exception zu werfen ist eigentlich auch unerwartet - ich würde FALSE zurückgeben, das ist zwar konzeptionell idiotisch, aber idiomatisch für PHP (warum sind die beiden Worte nur so ähnlich).

                  Das überzeugt mich nicht. Silent Failures sind technische Schulden und verursachen reale Kosten. Die PHP Library ist historisch leider so gewachsen, aber das ist für mich noch kein Freifahrtsschein um den Fehler jetzt immer wieder neu zu begehen und de facto Geld zu verbrennen.

                  1. Hallo,

                    Bei Nichtfinden eine Exception zu werfen ist eigentlich auch unerwartet - ich würde FALSE zurückgeben, das ist zwar konzeptionell idiotisch, aber idiomatisch für PHP (warum sind die beiden Worte nur so ähnlich).

                    ;-)

                    Das überzeugt mich nicht. Silent Failures sind technische Schulden

                    Das Nicht-Finden eines gesuchten Ausdrucks oder Objekts würde ich nicht als Failure bezeichnen, sondern es ist einer der zu betrachtenden Normalfälle. Gut, es gibt Grenzfälle - etwa wenn man auf dem Klo sitzt und kein Papier mehr findet. Das könnte ich dann tatsächlich als Failure gelten lassen. :-)

                    Die PHP Library ist historisch leider so gewachsen

                    Natürlich gewachsen wie jedes Geschwür?

                    Ciao,
                     Martin

                    --
                    Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                    1. Das Nicht-Finden eines gesuchten Ausdrucks oder Objekts würde ich nicht als Failure bezeichnen, sondern es ist einer der zu betrachtenden Normalfälle.

                      Der Failure (das Versagen) passiert dann, wenn der Programmierer einen der Fälle nicht beachtet. Man spricht dann von einem Defekt. Der Defekt ist noch kein Fehler, er wird erst zu einem, wenn wirklich mal ein Element nicht in einer Liste gefunden wird. Das kann auch erst Tage, Wochen oder Jahre nach Start des Programms passieren.

                      Beim false-Rückgabewert kann der Fehler zudem in einem völlig anderen Teil des Programms auftreten. Das macht es dann schwierig die Ursache, den Defekt, zu lokalisieren. Man spricht deshalb von einem "Silent Failure".

                      Bei der Exception tritt der Fehler genau beim Defekt auf.

                      Dieser zusätzliche Arbeitsaufwand beim Aufspüren des Defekts im Falle des Silent Failures, ist das was letzen Endes reales Geld kostet. Solange der Fehler noch nicht aufgetreten ist, sind es "nur" technische Schulden.

                    2. Hallo Der Martin,

                      - etwa wenn man auf dem Klo sitzt und kein Papier mehr findet.

                      Steht doch derzeit auf jedem Merkblatt – Großveranstaltungen meiden!

                      Bis demnächst
                      Matthias

                      --
                      Du kannst das Projekt SELFHTML unterstützen,
                      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
                    3. Hi,

                      Das Nicht-Finden eines gesuchten Ausdrucks oder Objekts würde ich nicht als Failure bezeichnen, sondern es ist einer der zu betrachtenden Normalfälle. Gut, es gibt Grenzfälle - etwa wenn man auf dem Klo sitzt und kein Papier mehr findet. Das könnte ich dann tatsächlich als Failure gelten lassen. :-)

                      Darum prüfe, wer sich an den Porzellanthron bindet,
                      ob sich auf der Rolle noch genügend Papier befindet ;-)

                      cu,
                      Andreas a/k/a MudGuard

                  2. Hallo 1unitedpower,

                    Silent Failures sind technische Schulden und verursachen reale Kosten.

                    Das überzeugt mich auch nicht. Die Grundsatzaussage schon, aber wie Martin schrieb: Eine Arraysuche, die nichts findet, ist nicht unbedingt eine Failure.

                    Für mich ist Legacy auch immer ein starkes Argument. Wenn ich 100 Funktionen habe, die FALSE zurückliefern und eine, die eine Exception wirft, ist das fehlerträchtiger als ein nicht abgefragtes FALSE. Don't make me think. Und nachgrübeln zu müssen, welches Error-Verhalten denn eine bestimmte Funktion gerade hat, ist ätzend.

                    Wenn ich ein neues System baue, ist das was anderes. Aber eine Array-Funktion, die sich in den Array-Zoo von PHP einfügen soll, die sollte auch zum Zoo passen.

                    Rolf

                    --
                    sumpsi - posui - clusi
                    1. Wenn ich 100 Funktionen habe, die FALSE zurückliefern und eine, die eine Exception wirft, ist das fehlerträchtiger als ein nicht abgefragtes FALSE. Don't make me think. Und nachgrübeln zu müssen, welches Error-Verhalten denn eine bestimmte Funktion gerade hat, ist ätzend.

                      Das Problem hast du in PHP doch sowieso schon. Manche Funktionen geben im Fehlerfall null (array_key_first) zurück. Manche geben false (arsort) zurück. Manche 0 (array_sum) Manche werfen Exceptions (array_chunk).

                      Wenn ich ein neues System baue, ist das was anderes. Aber eine Array-Funktion, die sich in den Array-Zoo von PHP einfügen soll, die sollte auch zum Zoo passen.

                      Schiefes Bild, ein Zoo lebt ja gerade von der Unterschiedlichkeit der Tiere :P Ich weiß aber was du meinst, nur die PHP Array-Funktionen sind halt sowieso schon nicht einheitlich.

                      1. Hallo,

                        Aber eine Array-Funktion, die sich in den Array-Zoo von PHP einfügen soll, die sollte auch zum Zoo passen.

                        Schiefes Bild, ein Zoo lebt ja gerade von der Unterschiedlichkeit der Tiere :P

                        im Prinzip schon, aber in einem Themen-Zoo "Faszination Afrika" würde ich keine Wombats, Elche oder Kaiserpinguine erwarten. Löwen, Giraffen und Klapperschlangen aber schon.

                        Ich weiß aber was du meinst, nur die PHP Array-Funktionen sind halt sowieso schon nicht einheitlich.

                        Naja, vieles an PHP ist ... irgendwie chaotisch. Deswegen ist bei mir das Handbuch selten mehr als einen Klick entfernt, wenn ich PHP schreibe.

                        So long,
                         Martin

                        --
                        Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                        1. Hallo,

                          Klapperschlangen aber schon.

                          Deren Vorkommen laut Wikipedia auf Amerika beschränkt ist?

                          Gruß
                          Kalk

                          1. Hi,

                            Klapperschlangen aber schon.

                            Deren Vorkommen laut Wikipedia auf Amerika beschränkt ist?

                            ich habe da die Naturdoku über die afrikanischen Wüsten von Jamie Uys im Hinterkopf (war das "Die lustige Welt der Tiere"?), in der auch Klapperschlangen vorkommen.

                            So long,
                             Martin

                            --
                            Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                            1. Hallo

                              Hi,

                              Klapperschlangen aber schon.

                              Deren Vorkommen laut Wikipedia auf Amerika beschränkt ist?

                              ich habe da die Naturdoku über die afrikanischen Wüsten von Jamie Uys im Hinterkopf (war das "Die lustige Welt der Tiere"?), in der auch Klapperschlangen vorkommen.

                              Hmm, der Wikipedia-Artikel zu Klapperschlangen sagt „Das Vorkommen von Klapperschlangen ist auf Amerika beschränkt.“

                              Tschö, Auge

                              --
                              Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
                              Hohle Köpfe von Terry Pratchett
                              1. Hi,

                                Deren Vorkommen laut Wikipedia auf Amerika beschränkt ist?

                                Hmm, der Wikipedia-Artikel zu Klapperschlangen sagt „Das Vorkommen von Klapperschlangen ist auf Amerika beschränkt.“

                                Da bringst Du ja vollkommen neue, hier noch nie genannte Dinge ins Spiel ;-)

                                cu,
                                Andreas a/k/a MudGuard

                                1. Hallo

                                  Deren Vorkommen laut Wikipedia auf Amerika beschränkt ist?

                                  Hmm, der Wikipedia-Artikel zu Klapperschlangen sagt „Das Vorkommen von Klapperschlangen ist auf Amerika beschränkt.“

                                  Da bringst Du ja vollkommen neue, hier noch nie genannte Dinge ins Spiel ;-)

                                  Nein, diesen Anspruch erhebe ich nicht. Ich gebe nur die Quelle direkt an, die Martins Erinnerung widerspricht.

                                  Tschö, Auge

                                  --
                                  Ein echtes Alchimistenlabor musste voll mit Glasgefäßen sein, die so aussahen, als wären sie beim öffentlichen Schluckaufwettbewerb der Glasbläsergilde entstanden.
                                  Hohle Köpfe von Terry Pratchett
                                  1. Hallo,

                                    Ich gebe nur die Quelle direkt an,

                                    mööööp!
                                    Wikipedia niemals als Quelle verwenden, nur als „Nachschlagewerk“… 😉

                                    Gruß
                                    Kalk

                            2. Hallo Martin,

                              nope. Da kommt der Seitenwinder (Bitis peringueyi) a.k.a. Zwergpuffotter vor, der nicht identisch ist mit der Seitenwinder-Klapperschlange (Crotalus cerastes).

                              Ob es jetzt auch der Seitenwinder war, der seine Schwanzspitze als Köder eingesetzt hat, das weiß ich nicht mehr. Aber Wikipedia sagt: Kann gut sein

                              Rolf

                              --
                              sumpsi - posui - clusi
                              1. Hallo,

                                nope. Da kommt der Seitenwinder (Bitis peringueyi) a.k.a. Zwergpuffotter vor, der nicht identisch ist mit der Seitenwinder-Klapperschlange (Crotalus cerastes).

                                danke, genau das war der Knackpunkt!

                                Ciao,
                                 Martin

                                --
                                Ich stamme aus Ironien, einem Land am sarkastischen Ozean.
                      2. Hello,

                        Das Problem hast du in PHP doch sowieso schon. Manche Funktionen geben im Fehlerfall null (array_key_first) zurück. Manche geben false (arsort) zurück. Manche 0 (array_sum) Manche werfen Exceptions (array_chunk).

                        [•••] und es wird bei FALSE nicht unterschieden zwischen kein Ergebnis/leere Menge und Fehler.

                        PHP ist eben noch nicht bereit dafür, mit künstlicher Dummheit programmiert zu werden, geweige denn, mit natürlicher Ignoranz ;-P

                        Glück Auf Tom mobil

                        1. Hallo Tom mobil,

                          [•••] und es wird bei FALSE nicht unterschieden zwischen kein Ergebnis/leere Menge und Fehler.

                          und manchmal ist false auch einfach nur false.

                          Bis demnächst
                          Matthias

                          --
                          Du kannst das Projekt SELFHTML unterstützen,
                          indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
                          1. Hello,

                            und manchmal ist false auch einfach nur false.

                            und von außen betrachtet gibt's da sogar noch zwei verschiedene :-O

                            Glück Auf Tom

                  3. Hello,

                    Das überzeugt mich nicht. Silent Failures sind technische Schulden und verursachen reale Kosten. Die PHP Library ist historisch leider so gewachsen, aber das ist für mich noch kein Freifahrtsschein um den Fehler jetzt immer wieder neu zu begehen und de facto Geld zu verbrennen.

                    Leider sind "Fehler" und "kein Ergebnis" auch (noch) nicht konsequent polymorph unterscheidbar.

                    Sonst könnte man es zukünftig so ähnlich, wie in guten alten 3rd-G Hochsprachen machen. Die Exception aka Exit-Handler wird bei Fehler konsequent geschmissen, wenn man ihn nicht vor Funktionsnutzung auf händische Behandlung umstellt. Dann muss er aber auch vor der Benutzung der nächsten Funktion abgefragt werden, sonst schmeißt die die Exception/den Exit-Handler.

                    Man kann dieses Verhalten allerdings mühevoll nachbilden, indem man jeder Originalfunktion nochmal einen Wrapper verpasst. Habe ich mal exemplarisch versucht. Wie das in PHP-OOP ginge, überschaue ich jetzt leider nicht. Vermutlich etwas einfacher. Da werden die Exceptions ja ohnehin durchgereicht, oder?

                    Glück Auf
                    Tom mobil

                2. Lieber Rolf,

                  Ich würde aber tatsächlich das Array als 1. Parameter nehmen, weil die übrigen Array-Funktionen von PHP das auch so handhaben.

                  hach, wenn's so wäre...

                  • array_key_exists($search, $array)
                  • implode($separator, $array)
                  • in_array($search, $array)

                  Die drei fallen mir spontan ein. Wer noch andere weiß, darf gerne ergänzen.

                  Liebe Grüße

                  Felix Riesterer

            3. 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
            4. Der Sinn von assoziativen Array's besteht in der direkten Adressierbarkeit über den oder die Schlüssel.

              MFG

        3. Hallo,

          Inhalt von 0

          ich möchte aber den Inhalt von id=28 haben

          Drückst du das nur komisch aus oder ist dir das Ganze einfach nicht klar?

          Gruß
          Kalk

    3. Hallo,

      Langsam bekomme ich graue Haare, ich lese über alle wie man ein Array ansteuert, aber ich bekomme es wenn es nicht in einer Schleife ist nicht hin .

      Du musst dir ein Array als Sammlung von Variablen vorstellen. An den Inhalt der Variablen kommst dann entweder, wenn es ein sogenanntes assoziatives Array ist, über den Namen ran oder sonst eben über die Position.

      In deinem Fall siehts nur etwas komplizierter aus, weil du ein verschachteltes Array hast. Also der ersten Variable an der Position 0 ist wieder ein Array zugeordnet.

      Gruß
      Kalk

  6. Lieber Manfred,

    Und ich nage immer noch an meinem ARRAY.

    warum nur willst Du Hinweise nicht annehmen? Warum weigerst Du Dich, im Handbuch nach dem wesentlichen Parameter zu forschen, der Dir Deine nummerierten Indices unterdrückt und nur ein assoziatives Array zurückliefert?

    Liebe Grüße

    Felix Riesterer

    1. Doch will ich.

      zum Handbuch, ja ich habe es gesehen.

      Nur eben habe ich ein weiteres Problem, mit dem array, und danke für deinen weiteren Link, ich versuche es durchzulesen und zu verstehen, da ich der englischen Sprache wirklich nicht gerade mächtig bin.