Ankündigung

Einklappen
Keine Ankündigung bisher.

Werte verschiedener Arrays vereinen

Einklappen

Neue Werbung 2019

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

  • Werte verschiedener Arrays vereinen

    Ich möchte Werte aus drei Arrays vereinen (Auszüge s.u.). Dabei beziehen sich die Werte der einzelnen Arrays aufeinander. Versucht hab ichs mit folgendem Codeschnipsel. D.h. während das erste Spielerarray durchläuft soll abgeglichen werden ob die AllianzIDs übereinstimmen und falls ja, dann werden sie zusammengebracht. Leider wird mir trotz:
    ini_set('display_errors', 1);
    error_reporting(E_ALL);
    keine Fehler ausgegeben sondern nur die lima-city Fehlerseite.

    Vielleicht könntet ihr mir nen Tipp geben was ich falsch mache!


    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( 'sid'=>$sid'spielername'=>$sname'allianz'=>$allianz'allyname'=>$allyname'kuerzel'=>$allykuerzel); 

    Spieler
    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] => 6665
    [punkte_vortag] => 6498
    [platzierung] => 3
    [platzierung_vortag] => 3
    [allianz] => 23
    Allianz
    Array
    (
    [0] => stdClass Object
    (
    [id] => 2
    [name] => Böse Buben
    [kuerzel] => BB
    [punkte] => 28
    [punkte_vortag] => 28
    [platzierung] => 17
    [platzierung_vortag] => 14
    )

    [1] => stdClass Object
    (
    [id] => 6
    [name] => AggroSchatten
    [kuerzel] => AS|_
    [punkte] => 802
    [punkte_vortag] => 802
    [platzierung] => 7
    [platzierung_vortag] => 8
    )


  • #2
    Zitat von gh0st Beitrag anzeigen

    PHP-Code:
      $sid=$spieler[$i]->'id';
      
    $sname=$spieler[$i]->'spielername';
      
    $allianz=$spieler[$i]->'allianz'
    Nachdem ich das im letzten Thread schon in ähnlicher Weise gesehen habe: Bitte lerne die PHP-Syntax und mach dir klar wann du String-Begrenzer brauchst und wann nicht. Ich werde den Eindruck nicht los das du einfach nur ratest, ob man da welche verwendet oder nicht.

    Kommentar


    • #3
      Ich werde den Eindruck nicht los das du einfach nur ratest, ob man da welche verwendet oder nicht.
      Das gleiche kann man übrigens über die Anwendung der dt. Rechtschreibung sagen.
      --

      „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


      • #4
        der Rechtschreibung ist doch ganz i.O., wenn er auch die richtige Grammatik schreibte...

        Kommentar


        • #5
          Nachdem ich das im letzten Thread schon in ähnlicher Weise gesehen habe: Bitte lerne die PHP-Syntax und mach dir klar wann du String-Begrenzer brauchst und wann nicht. Ich werde den Eindruck nicht los das du einfach nur ratest, ob man da welche verwendet oder nicht.
          Die String-Begrenzer sind momentan nebensächlich, weshalb ich mich mom auch nicht drum gekümmert hab. Auch die Grammatik und Rcehtcshriebnug ist mom nebensächlich Mir gehts mom darum den Fehler for ... if - Teil zu finden

          Kommentar


          • #6
            Für uns ist das nicht nebensächlich.
            --

            „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


            • #7
              Bewege dich mal von oldschool forschleifen weg und nutze Array-Mapper für dein Vorhaben:

              PHP-Code:
              <?php

              $spieler 
              = array(
                  (object) array(
                      
              'id' => 1,
                      
              'spielername' => 'Heinz',
                      
              'allianz' => 0,
                  ),
                  (object) array(
                      
              'id' => 2,
                      
              'spielername' => 'Peter',
                      
              'allianz' => 0,
                  ),
                  (object) array(
                      
              'id' => 3,
                      
              'spielername' => 'Mark',
                      
              'allianz' => 1,
                  ),
              );

              $ally = array(
                  (object) array(
                      
              'id' => 1,
                      
              'name' => 'Legends of kacknoobs',
                      
              'kuerzel' => 'LoK',
                  ),
                  (object) array(
                      
              'id' => 2,
                      
              'name' => 'Dawn of Justice',
                      
              'kuerzel' => 'DoJ',
                  ),
              );

              $data array_map(function($spieler) use ($ally) {
                  
              $data['sid'] = $spieler->id;
                  
              $data['spielername'] = $spieler->spielername;
                  
              $data['allianz'] = $spieler->allianz;
                  
              $data['allyname'] = $ally[$spieler->allianz]->name;
                  
              $data['kuerzel'] = $ally[$spieler->allianz]->kuerzel;

                  return 
              $data;
              }, 
              $spieler);

              var_dump($data);
              Code:
              array(3) {
                [0]=>
                array(5) {
                  ["sid"]=>
                  int(1)
                  ["spielername"]=>
                  string(5) "Heinz"
                  ["allianz"]=>
                  int(0)
                  ["allyname"]=>
                  string(20) "Legends of kacknoobs"
                  ["kuerzel"]=>
                  string(3) "LoK"
                }
                [1]=>
                array(5) {
                  ["sid"]=>
                  int(2)
                  ["spielername"]=>
                  string(5) "Peter"
                  ["allianz"]=>
                  int(0)
                  ["allyname"]=>
                  string(20) "Legends of kacknoobs"
                  ["kuerzel"]=>
                  string(3) "LoK"
                }
                [2]=>
                array(5) {
                  ["sid"]=>
                  int(3)
                  ["spielername"]=>
                  string(4) "Mark"
                  ["allianz"]=>
                  int(1)
                  ["allyname"]=>
                  string(15) "Dawn of Justice"
                  ["kuerzel"]=>
                  string(3) "DoJ"
                }
              }
              Das geht noch wesentlich einfacher wenn man sich auf ein einheitliches Model bei der Namensgebung der Array-Keys / Properties festlegt.
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Grundsätzlich versteh ich deine Vorgehensweise, nur an der Umsetzung haperts noch ziemlich.
                Aufgrund meiner bescheidenen Kenntnisse vermute ich das es daran liegt wie ich die Arrays krieg?! Kann das sein?

                Hier mal der Link zu unten stehendem Skript, da sind die Arrays so ausgegeben wie sie nach dem json_decode daherkommen.

                http://testgh0st123.lima-city.de/seekampf2.php

                PHP-Code:
                 # Dekodieren des InselJSONs 
                 
                $inseln=json_decode($fp);
                 
                  
                # Dekodieren des AllianzJSONs 
                 
                $spieler=json_decode($fp2);
                 
                  
                # Dekodieren des AllianzJSONs 
                 
                $ally=json_decode($fp3);
                 
                 
                # Inselldaten durchgehen und ins Sammelarray eintragen
                 
                for($i=0$i count($inseln); $i++)
                   {
                   
                $koord=$inseln[$i]->koordinaten;
                   
                $iname=$inseln[$i]->inselname;
                   
                $zocker=$inseln[$i]->spieler;
                   
                $sammel[$i]=array( => $i'koordinaten'=>$koord'inselname'=>$iname'besitzer'=>$zocker); 
                }

                # Spieler- und Allianzarray vereinen
                /*$data = array_map(function($spieler) use ($ally) { 
                    $data['sid'] = $spieler->id; 
                    $data['spielername'] = $spieler->spielername; 
                    $data['allianz'] = $spieler->allianz; 
                    $data['allyname'] = $ally[$spieler->allianz]->name; 
                    $data['kuerzel'] = $ally[$spieler->allianz]->kuerzel; 

                    return $data; 
                }, $spieler); 

                #var_dump($data);'*/



                echo "<h1>Ally</h1><br>";
                echo 
                "<pre>";
                print_r($ally);
                echo 
                "</pre>";
                 
                 
                 echo 
                "<h1>Spieler</h1><br>";
                 echo 
                "<pre>";
                 
                print_r($spieler);
                 echo 
                "</pre>";
                 
                 echo
                "<h1>Inseln</h1><br>";
                 echo 
                "<pre>";
                print_r($inseln);
                echo 
                "</pre>"

                Kommentar


                • #9
                  PHP-Code:

                  // mit json_decode($json, true) bekommst du solche arrays:
                  $spieler = array(
                         array(
                              
                  'id' => 1,
                              
                  'spielername' => 'Heinz',
                              
                  'allianz' => 1,
                        ),
                         array(
                              
                  'id' => 2,
                              
                  'spielername' => 'Peter',
                              
                  'allianz' => 2,
                        ),
                         array(
                              
                  'id' => 3,
                              
                  'spielername' => 'Mark',
                              
                  'allianz' => 1,
                        ),
                  );

                  $ally = array(
                         array(
                              
                  'id' => 1,
                              
                  'name' => 'Legends of kacknoobs',
                              
                  'kuerzel' => 'LoK',
                        ),
                         array(
                              
                  'id' => 2,
                              
                  'name' => 'Dawn of Justice',
                              
                  'kuerzel' => 'DoJ',
                        ),
                  );

                  $ally=array_column($ally,null,'id');

                  $merged=array_map(function($spieler) use ($ally){
                     
                  $allianz=$ally[$spieler['allianz']];
                     return array(
                        
                  'spielerID' => $spieler['id'],
                        
                  'spielerName'=>$spieler['spielername'],
                        
                  'allianzID' => $aid,
                        
                  'allianzName'=>$allianz['name'],
                        
                  'allianzKuerzel'=> $allianz['kuerzel']
                     );

                  }, 
                  $spieler);
                  var_dump($merged); 
                  ist nur als ansatz gedacht. wird sicherlich zu fehlern führen, wenn ein spieler keine allianz hat.

                  aber mal so ne frage: was willst du genau erreichen mit deiner seite? ich nehme mal an, dass du irgendwie ne hilfseite für dieses spiel machen möchtest. wo du vielleicht statistiken zum spielverlauf zeigst oder sonstwas hilfreiches. dann wirst du wahrscheinlich nicht drum rum kommen, die daten in einer datenbank zu speicher. dann tu das doch gleich nach dem abgreifen der daten und arbeite dann mit der datenbank und joins.
                  liebe Grüße
                  Fräulein Dingsda

                  Kommentar


                  • #10
                    leider ist hier kein edit möglich.

                    den vorschlag im vorigen post hab ich gemacht, weil ich browsergames kenne, wo die daten, die man via api bekommt kann nur ein mal am tag geupdatet werden. in solchen fällen ist es dann wirklich unsinnig bei jedem request die daten erneut vom spiel anzufordern. dann macht man lieber nen cronjob alle 24 stunden. kann natürlich sein, dass es hier anders ist.
                    liebe Grüße
                    Fräulein Dingsda

                    Kommentar


                    • #11
                      Hi dingsda, danke für deine Hilfe!

                      Der Programmierer des Spiels hat eine Api erstellt mit der die aktuellen Daten im JSON-Format ausgegeben werden ( Foruminfo zur API https://www.seekampf.de/forum/viewtopic.php?f=6&t=148 ). Leider gibts die Infos nicht zusammen sondern in drei JSONs getrennt (Inselarray mit id-Verweis bei Spieler/Spielerarray mit id Verweis auf die Allianz / Allianzarray ). Bisher hab ich sowas auch tatsächlich mit ner MySQL-DB gelöst, jetzt wollt ich mir aber XML etwas aneignen und die Daten so speichern. D.h. die Infos auslesen - zusammen fassen - in XML abspeichern.

                      Mein Problem ist halt die Frage wie ich die Infos in ein Sammelarray zusammenkrieg ( egal ob über Function/For - Schleifen/... ).

                      den vorschlag im vorigen post hab ich gemacht, weil ich browsergames kenne, wo die daten, die man via api bekommt kann nur ein mal am tag geupdatet werden. in solchen fällen ist es dann wirklich unsinnig bei jedem request die daten erneut vom spiel anzufordern. dann macht man lieber nen cronjob alle 24 stunden. kann natürlich sein, dass es hier anders ist.
                      Das die Daten bei dem Script automatisch abgefragt werden hab ich hier nur gemacht damit ich sie mir nicht abspeichern muss *g*. Wenns fertig ist will ich die Daten auch nur ein/2mal täglich updaten (evtl. mach ich nen Cronjob).
                      Im Endeffekt möcht ich ne (total einfache) Karte erstellen. Mehr ist mom noch nicht geplant

                      Jetzt muss ich halt überlegen ob ich die Arrays iwie zusammenkrieg ( unter Berücksichtigung von Herrscherlosen Inseln und Allianzlosen Spielern ) und dann in XML hau oder ob ich nicht doch wieder auf MySQLDB umschwenk?

                      Kommentar

                      Lädt...
                      X