Ankündigung

Einklappen
Keine Ankündigung bisher.

asort mit PHP 5.5 und 7.1 unterschiedliche Wertre

Einklappen

Neue Werbung 2019

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

  • asort mit PHP 5.5 und 7.1 unterschiedliche Wertre

    Array vor Sortierung (asort):
    PHP-Code:
      Array (     [username] => username     [password] => password     [number] => 205ab     [webname] => webname     [email] => employer4@site.de     [language] => en     [usertype] => 2     [agentid] => 10005     [birthday] => 01.01.2000     [reference] => 777     [taxId] => taxid     [adresses] => Array         (             [0] => Array                 (                     [primaryAdress] => 1                     [typeAdress] => 1                     [company] => company                     [salutation] => 1                     [firstName] => firstname                     [lastName] => lastname                     [street] => street                     [country] => de                     [town] => town                     [postCode] => 12345                     [phone] => 08756232548                     [mobile] => 08756232542                     [additionalPhone] => 08756231232                     [fax] => 0446731232                     [email] => employer4@site.de                     [skype] => employerskype                 )          )      [bank] => Array         (             [0] => Array                 (                     [primaryBank] => 1                     [typeBank] => 1                     [IBAN] => DE89370400440532013000                     [BIC] => ABCADEFFXXX                 )          ) 
    Array nach Sortierung (asort) mit PHP 5.5
    PHP-Code:
      Array (     [birthday] => 01.01.2000     [email] => employer4@site.de     [language] => en     [password] => password     [taxId] => taxid     [username] => username     [webname] => webname     [usertype] => 2     [agentid] => 10005     [number] => 205ab     [reference] => 777     [bank] => Array         (             [0] => Array                 (                     [primaryBank] => 1                     [typeBank] => 1                     [IBAN] => DE89370400440532013000                     [BIC] => ABCADEFFXXX                 )          )      [adresses] => Array         (             [0] => Array                 (                     [primaryAdress] => 1                     [typeAdress] => 1                     [company] => company                     [salutation] => 1                     [firstName] => firstname                     [lastName] => lastname                     [street] => street                     [country] => de                     [town] => town                     [postCode] => 12345                     [phone] => 08756232548                     [mobile] => 08756232542                     [additionalPhone] => 08756231232                     [fax] => 0446731232                     [email] => employer4@site.de                     [skype] => employerskype                 )          )  ) 

    Array nach Sortierung (asort) mit PHP 7.1
    PHP-Code:
      Array (     [birthday] => 01.01.2000     [number] => 205ab     [email] => employer4@site.de     [language] => en     [password] => password     [username] => username     [webname] => webname     [usertype] => 2     [reference] => 777     [agentid] => 10005     [taxId] => taxid     [bank] => Array         (             [0] => Array                 (                     [primaryBank] => 1                     [typeBank] => 1                     [IBAN] => DE89370400440532013000                     [BIC] => ABCADEFFXXX                 )          )      [adresses] => Array         (             [0] => Array                 (                     [primaryAdress] => 1                     [typeAdress] => 1                     [company] => company                     [salutation] => 1                     [firstName] => firstname                     [lastName] => lastname                     [street] => street                     [country] => de                     [town] => town                     [postCode] => 12345                     [phone] => 08756232548                     [mobile] => 08756232542                     [additionalPhone] => 08756231232                     [fax] => 0446731232                     [email] => employer4@site.de                     [skype] => employerskype                 )          )  ) 
    Hat jemand eine Idee woran das liegen kann???
    Gruß

    HCA

  • #2
    Kannst du bitte einen Testcode posten?

    Kommentar


    • #3
      PHP-Code:
      $data json_decode($datatrue);
      asort($data);
      print_r($data); 
      Gruß

      HCA

      Kommentar


      • #4
        ja und wo kommt $data her? Das ist doch so nicht nachstellbar.
        [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

        Kommentar


        • #5
          Die Arrays kannst du mit dump_arrobj() als PHP-Code ausgeben!

          Kommentar


          • #6
            Jetzt musst ich echt nachschauen was asort macht! Die Sortierung ist doch schon bei den ersten Elementen kompletter unsinn. (egal ob 5 oder 7) Poste mal ein zugehörigen json String.

            PS: print_r ist zum debuggen im Code ungeeignet, da übersieht du teilweise ganz blöde Fehler. Benutz dafür besser var_dump() oder gleich ein Debugger.

            Kommentar


            • #7
              PHP-Code:

              $url 
              'https://domain.den';
                          
              $APIWebSiteID "abc";
                          
              $APISecureCode "112233445566778899";

              $employer = array();
                          
              $employer["username"] = "username";
                          
              $employer["password"] = "password";
                          
              $employer["number"] = "205ab";
                          
              $employer["webname"] = "webname";
                          
              $employer["email"] = "employer4@site.de";
                          
              $employer["language"] = "en";
                          
              $employer["usertype"] = 2;
                          
              $employer["agentid"] = "10005";
                          
              $employer["birthday"] = "01.01.2000";
                          
              $employer["reference"] = 777;
                          
              $employer["taxId"] = "taxid";

                          
              $employer["adresses"] = array();
                          
              $employer["adresses"][0] = array();
                          
              $employer["adresses"][0]["primaryAdress"] = 1;
                          
              $employer["adresses"][0]["typeAdress"] = 1;
                          
              $employer["adresses"][0]["company"] = "company";
                          
              $employer["adresses"][0]["salutation"] = 1;
                          
              $employer["adresses"][0]["firstName"] = "firstname";
                          
              $employer["adresses"][0]["lastName"] = "lastname";
                          
              $employer["adresses"][0]["street"] = "street";
                          
              $employer["adresses"][0]["country"] = "de";
                          
              $employer["adresses"][0]["town"] = "town";
                          
              $employer["adresses"][0]["postCode"] = "12345";
                          
              $employer["adresses"][0]["phone"] = "08756232548";
                          
              $employer["adresses"][0]["mobile"] = "08756232542";
                          
              $employer["adresses"][0]["additionalPhone"] = "08756231232";
                          
              $employer["adresses"][0]["fax"] = "0446731232";
                          
              $employer["adresses"][0]["email"] = "employer4@site.de";
                          
              $employer["adresses"][0]["skype"] = "employerskype";          

                          
              $employer["bank"] = array();
                          
              $employer["bank"][0] = array();
                          
              $employer["bank"][0]["primaryBank"] = "1";
                          
              $employer["bank"][0]["typeBank"] = "1";
                          
              $employer["bank"][0]["IBAN"] = "DE89370400440532013000";
                          
              $employer["bank"][0]["BIC"] = "ABCADEFFXXX";
                          
              $json json_encode($employer);

                          
              $connection = array();
                          
              $connection["websiteId"] = $APIWebSiteID;
                          
              $connection["action"] = "user";
                          
              $connection["hash"] = generateHash($connection["websiteId"],$connection["action"],$json,$APISecureCode);
                          
              $request "connection=".json_encode($connection);
                          
              $request.= "&".$connection["action"]."=".$json;



              function 
              generateHash($websiteId,$action,$data,$APISecureCode){
                      
              $data json_decode($datatrue);

                      
              asort($data);
                      
              print_r($data);
                      
              $hashstr $websiteId.$action.getHashString($data).$APISecureCode;
                      return 
              md5($hashstr);
                  } 
              Gruß

              HCA

              Kommentar


              • #8
                Das ist mal wieder so ein PHP WTF?! Moment. Ich bin bis heute davon ausgegangen, PHP verwendet eine lexikalische oder numerische Sortierung. Offensichtlich kann PHP auch beides Gleichzeitig verwenden. Das Ergebnis von PHP 7 kann ich nachvollziehen, das von PHP 5 nicht. Jetzt ist natürlich die Frage, was hast du für Möglichkeiten? Kannst den Hash Algorithmus ändern (auch wenn das mit Aufwand verbunden ist) oder wird der von Extern vorgegeben? Wenn der von Extern vorgegeben ist, solltest du das Problem dort schildern. Hier irgendwie das Verhalten von PHP5 nachbauen zu wollen, ist eine ganz schlechte Idee.
                Es würde schon reichen, im Hash Algorithmus dem asort als zweiten Paramenter ein SORT_STRING mitzugeben.

                *edit* was du noch machen könntest, im Array vor json_encode alle interger/float Element zu Strings casten.

                Kommentar


                • #9
                  Bleibt für mich die Frage warum mit SORT_REGULAR da unterschiedliche Ergebnisse kommen. Hab das mal reduziert:
                  PHP-Code:
                  $employer = array (
                    
                  'username' => "username",
                    
                  'number' => "205ab",
                    
                  'email' => "employer4@site.de",
                    
                  'language' => "en",
                    
                  'usertype' => 2,
                    
                  'agentid' => "10005",
                    
                  'birthday' => "01.01.2000",
                    
                  'reference' => 777,
                  );

                  asort($employer,SORT_REGULAR);
                  var_dump($employer); 
                  Unter 3v4l.org kommen da unterschiedliche Ergebnisse.

                  Dies hier
                  Warnung
                  Seien Sie vorsichtig bei der Sortierung von Arrays mit unterschiedlichen Typen, weil sort() zu unvorhersehbaren Ergebnissen kommen kann.
                  aus dem Manual sollte man wohl ernster nehmen.

                  Kommentar


                  • #10
                    Zitat von jspit Beitrag anzeigen
                    Bleibt für mich die Frage warum mit SORT_REGULAR da unterschiedliche Ergebnisse kommen.
                    Ich denke der Sortieralgorithmus wurde geändert. Zum sortieren brauchst du eine Totalordnung, unter anderem gilt da auch a > b > c => a > c. Das ist aber mit PHP nicht gegeben, wenn einmal numerisch, das andere mal lexikalisch verglichen wird:
                    '205ab' > 2 > 'blub' aber 'blub' > '205ab'

                    Was soll der Sortieralgorithmus da machen? Der einfachste Algorithmus würde endlos laufen, ein intelligenterer produziert Müll. Tauschst du den Alogithmus, ändert sich damit auch, welche Elemente miteinander verglichen werden.

                    Typisch PHP...

                    Kommentar

                    Lädt...
                    X