Ankündigung

Einklappen
Keine Ankündigung bisher.

bestimmten Wert aus Array auslesen?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • bestimmten Wert aus Array auslesen?

    Kann man aus einem Array direkt bestimmte Wert auslesen oder muss man jedesmal das ganze Array mit for each durchlaufen lassen?

    Pseudocode:
    gib aus Spielername+allianz wo id=x

    << Kann man das so in der Art machen oder muss man mit for each das Array durchlaufen lassen und jedesmal testen ob die gerade aktuelle ID der gesucheten entspricht und falls ja dann ausgeben ansonsten weiter durchlaufen?

    Code:
    Array
     (
     [0] => stdClass Object
     (
     [id] => 1
     [spielername] => Lumpy
     [punkte] => 1000
     [punkte_vortag] => 1000
     [platzierung] => 16
     [platzierung_vortag] => 16
     [allianz] => 23
     )
    
     [1] => stdClass Object
     (
     [id] => 2
     [spielername] => vengador
     [punkte] => 6498
     [punkte_vortag] => 6355
     [platzierung] => 3
     [platzierung_vortag] => 3
     [allianz] => 23


  • #2
    Ahoi,

    ich denke mal da steht eigentlich genug im Inet dazu aber gut ... hier bitte
    PHP-Code:
    if(Array['id'] == 1)
    {
      echo Array[
    'spielername'].Array['allianz '];

    ------
    Grüße Manü

    Kommentar


    • #3
      Das nennt sich "random access" und ja, solange du weisst, welchen Offset du ansprechen willst, kannst du Inhalte eines Arrays direkt abgreifen, ohne erst über alle vorhergehenden Elemente iterieren zu müssen.
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        Leider krieg ich nur ein leeres Browserfenster bei der Ausführung? Könnte es am "Offset" ( damit hatte ich noch nichts zu tun ) liegen oder hab ichs falsch übernommen?


        PHP-Code:
         $spieler=json_decode($fp2);
         
         if(
        $spieler['id'] == 2)
        {
          echo 
        $spieler['spielername'].$spieler['allianz'];

        P.S.:
        folgendes Schnipsel gibt das Array ( wie im ersten Post zu sehen ) korrekt aus, also müsste es wohl an meinem neuen Teil liegen?!
        PHP-Code:
        #  echo "<pre>";
        # print_r($spieler);
        #echo "</pre>"; 

        Kommentar


        • #5
          Du greifst die falsche Info ab..

          Dein Array enthält Objekte. Solange der Offset im Array nicht der gesuchten ID entspricht, kommst du ums Suchen (und damit ums Iterieren) nicht herum.

          Code:
          array
           (
           [0] => stdClass Object
            ^
             Das ist der Offset im Array
          
           (
           [id] => 1
                   ^
                   Das ist die gesuchte ID
          
           [spielername] => Lumpy
           [punkte] => 1000
           [punkte_vortag] => 1000
           [platzierung] => 16
           [platzierung_vortag] => 16
           [allianz] => 23
           )
          edit: zu früh abgeschickt.

          Beim Anlegen des Arrays könntest du die ID als Offset gebrauchen.
          PHP-Code:
          $array = array();
          // database query...
          while ($row fetch_object()) { // fetch database row as object
            // now use the ID of the user as offset in the array
            
          $array$row->id ] = $row;

          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

          Kommentar


          • #6
            Zitat von gh0st Beitrag anzeigen
            ein leeres Browserfenster
            error_reporting hochdrehen, dann siehst du vermutlich Fehlermeldungen.

            In deinem Array sind Objekte, dh da du vermutich nur die Objekt-Eigenschaft "id" kennst und nicht die die Array-ID (Key) musst su sowas in der Art machen.. kurzes Beispiel:

            PHP-Code:
            // beispiele anlegen
            $obj1 = new stdClass();
            $obj1->id 12;
            $obj1->spielername "Lumpi";
            $obj1->allianz "23";

            $obj2 = new stdClass();
            $obj2->id 18;
            $obj2->spielername "vegador";
            $obj2->allianz "23";

            $arr = array();
            $arr[] = $obj1;
            $arr[] = $obj2;

            // wie schauts aus - ja ähnlich...
            print_r($arr);
            /*
            Array
            (
                [0] => stdClass Object
                    (
                        [id] => 12
                        [spielername] => Lumpi
                        [allianz] => 23
                    )

                [1] => stdClass Object
                    (
                        [id] => 18
                        [spielername] => vegador
                        [allianz] => 23
                    )

            )

            */

            // und nun - zum auslesen/suchen, muss keine Funktion sein...
            function findThem($arr$userId) {
                
                foreach(
            $arr as $key => $val) {
                    if (
            $val->id == $userId) {
                        
            // als string
                        //return $val->spielername . " " . $val->allianz;
                        // oder als array
                        
            return array($val->spielername$val->allianz);
                    }
                }
            }

            // als String: "vegador 23"
            echo findThem($arr18);

            // oder als array zur strukturierten Weiterverarbeitung.
            var_dumpfindThem($arr18) );
            /*
            Array(2) {
              [0]=>
              string(7) "vegador"
              [1]=>
              string(2) "23"
            }
            */ 
            LG
            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Ui da hab ich ja verschiedenes zum testen - Danke Leute!

              Ich hab jetzt mal rumgespielt und aus dem alten Array ein neues erstellt. Bei dem müsste die if-Abfrage eigentlich gehen ( von wegen Offset ) aber anscheinend mags mich immer noch nicht. Das neue Array wird angezeigt aber die If-Abfrage mag er nicht ( Btw. Es kommt kein Fehler aber error_reporting(E_ALL); ist gesetzt ).



              PHP-Code:
              $spieler=json_decode($fp2);
                 
              $sammel2 = array();
                for(
              $i=0$i count($spieler); $i++)
                 {
                 
              $sid=$spieler[$i]->id;
                 
              $sname=$spieler[$i]->spielername;
                 
              $allianz=$spieler[$i]->allianz;
                 
              $sammel2[$i]=array( => $isid=>$sidspielername=>$snameallianz=>$allianz); 
              }

               echo 
              "<pre>";
               
              print_r($sammel2);
              echo 
              "</pre>";
               
               if(
              $sammel2['sid'] == 2)
              {
               echo 
              $sammel2['spielername'].$sammel2['allianz'];

              Arrayausgabe ($sammel2)
              Code:
              Array
              (
                  [0] => Array
                      (
                          [0] => 0
                          [sid] => 1
                          [spielername] => Lumpy
                          [allianz] => 23
                      )
              
                  [1] => Array
                      (
                          [0] => 1
                          [sid] => 2
                          [spielername] => vengador
                          [allianz] => 23
              ..............

              Kommentar


              • #8
                Du greifst immer noch auf die falschen Elemente zu... das äußere Array HAT KEINEN Schlüssel "sid" !!

                Nochmal (und bitte GENAU lesen!):
                Du musst als Offset die ID des Benutzers verwenden, dann (und NUR dann) kannst du direkt auf das Array zugreifen und den "richtigen" Datensatz abgreifen. Das Spieler-Objekt für sid 1 MUSS an Offset 1 liegen, damit das funktioniert. Siehe dazu auch mein Pseudocode Stückchen...
                Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                Kommentar


                • #9
                  PHP-Code:
                  $sammel2[*HIER FEHLT DER KEY*]['sid'
                  Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                  PHP.de Wissenssammlung | Kein Support per PN

                  Kommentar


                  • #10
                    D.h. aber dann das ich garnicht direkt zugreifen kann, da der Offset immer fortlaufend ist und ich ja nicht weiss in welchem die richtige id drin ist. Also muss ich so oder so immer das Array durchlaufen lassen und jeden Offsetpart einzeln prüfen?!

                    Kommentar


                    • #11
                      Kannst du an der Stelle wo das Array erzeugt wird das ändern?
                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Ich könnts versuchen, so wie ich das Array mom erzeuge (aus JSON) kommen erst die Objekte und daraus dann unten stehendes mit fortlaufender Nummerierung.

                        Momentan veruch ichs aber auf ne andere Weise, leider klappts nicht ( lima-city, wo ichs teste, zeigt mir keinen Fehler an ). Es liegt wohl an der 2. For-Schleife vermute ich...

                        PHP-Code:
                          for($i=0$i count($spieler); $i++)
                           {
                          
                        $sid=$spieler[$i]->id;
                          
                        $sname=$spieler[$i]->spielername;
                          
                        $allianz=$spieler[$i]->allianz;
                           
                                                for(
                        $a=0$a<count($ally); $i++)
                                                {
                                                    if(
                        $ally[$a]['id']== $allianz
                                                        
                        {
                                                        
                        $allyname=$ally[$a]->name;
                                                        
                        $allykuerzel=$ally[$a]->kuerzel;
                                                        }
                                                }        
                           
                           
                        $sammel2[$i]=array( => $isid=>$sidspielername=>$snameallianz=>$allianzallyname=>$allynamekuerzel=>$allykuerzel); 

                        Array
                        (
                        [0] => Array
                        (
                        [0] => 0
                        [sid] => 1
                        [spielername] => Lumpy
                        [allianz] => 23
                        )

                        [1] => Array
                        (
                        [0] => 1
                        [sid] => 2
                        [spielername] => vengador
                        [allianz] => 23
                        ..............

                        Kommentar


                        • #13
                          PHP-Code:
                            for($i=0$i count($spieler); $i++) 
                             { 
                            
                          $sid=$spieler[$i]->id
                          ...
                             
                          $sammel2[$i]=array( => $isid=>$sidspielername=>$snameallianz=>$allianzallyname=>$allynamekuerzel=>$allykuerzel); 
                          *seufz*
                          PHP-Code:
                          $sammel2[$sid]=array( => $isid=>$sidspielername=>$snameallianz=>$allianzallyname=>$allyname,
                                   ^^^^ 
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #14
                            PHP-Code:
                            $sammel2[$sid]=array( => $isid=>$sidspielername=>$snameallianz=>$allianzallyname=>$allyname,
                                                           ^^^        ^^^^^^^^^^^          ^^^^^^^  ... 
                            Auch ganz großes Kino
                            --

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              Auch ganz großes Kino
                              Naja, ich hab drei Arrays (aus JSONs dekodiert ) die zueinander gehören.
                              Array1 > Koordinaten mit id Verweis auf Spieler
                              Array2 > Spieler mit id (Verweis Array 1 ) und Allianzverweis auf Array3
                              Array3 > Allianzen (Zuordnung mit Array2 )

                              Jetzt müsste ich aus allen drei Arrays die entsprechenden Daten rausholen und zu einem kompletten zusammenfassen. Dabei muss ich natürlich auf die richtige Zuordnung achten

                              Wenn ihr ne bessere Idee habt - gerne her damit!

                              Momentan möchte ich die benötigten Daten aus Array1 rausholen ( funzt ) und dann mit if ... checken ob die ids übereinstimmen. Falls ja dann im Array korrekt anfügen, wenn nein dann weiter durchlaufen.

                              Kommentar

                              Lädt...
                              X