hawkmaster: Multidimensionales Array , Typ Umwandlung

Hallo zusammen,

aus einer MySQL DB Abfrage (mit PDO und fetchAll() ) kommt ein Multidimensionales Array zurück

$sqldata = get_Data();

[0] => Array
        (
            [id] => 824
            [ynumber] => Test1
            [rating] => 40
            [description] => Meine Beschreibung
            [statusid] => 1
        )

[1] => Array
        (
            [id] => 459
            [ynumber] => Test-X
            [rating] => 0
            [description] => Nur ein Test
            [statusid] => 1
        )

[2] => Array
....

Ich würde jetzt gerne das Array [rating] in Integer umwandeln.

Ich weiss man könnte dies mit intval() machen, aber gibt es einen Weg dies direkt im multidimensionalen Array zu machen, oder müsste man es wieder erst auseinander bauen und dann den einzelnen Wert umwandeln und wieder in ein neues Array schreiben?

vielen Dank und viele Grüße
hawk

  1. Meine Damen und Herren, habe ich Ihre Aufmerksamkeit?

    Ich weiss man könnte dies mit intval() machen, aber gibt es einen Weg dies direkt im multidimensionalen Array zu machen, oder müsste man es wieder erst auseinander bauen und dann den einzelnen Wert umwandeln und wieder in ein neues Array schreiben?

    Du kannst einfach über das array laufen, und für jeden Eintrag eine entsprechende Funktion aufrufen lassen.

    array_walk( $sqldata, function ( &$row ) {  
       $row['rating'] = intval( $row['rating'] );  
    });  
    
    

    Wichtig ist, dass &$row eine Referenz auf den tatsächlichen Array-Eintrag ist und keine Kopie.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Hallo zusammen,

      vielen Dank an Euch für die Hilfe

      array_walk( $sqldata, function ( &$row ) {

      $row['rating'] = intval( $row['rating'] );
      });

        
      Das klappt so wirklich gut.  
        
      Hintergrund:  
      Ich hatte so etwas gesucht, weil PHP (PDO) die MySQL Int Daten immer als String zurückbringt.  
        
        
      vielen Dank und viele Grüße  
      hawk
      
      1. Tach!

        Ich hatte so etwas gesucht, weil PHP (PDO) die MySQL Int Daten immer als String zurückbringt.

        Was ist denn dein eigentliches Problem mit dem Nicht-Integer-Typ? PHP wandelt das doch bei Bedarf selbständig um.

        Eine andere Lösung wäre möglicherweise, Objekte zurückgeben zu lassen und in deren Konstruktor korrigierst du den Typ: http://php.net/manual/en/pdostatement.fetchall.php#114253.

        dedlfix.

        1. Hallo dedlfix,

          Was ist denn dein eigentliches Problem mit dem Nicht-Integer-Typ? PHP wandelt das doch bei Bedarf selbständig um.

          Ich hatte die SQL Daten per Ajax Request in jQuery abgerufen und hier in einer jQuery Datatable dargestellt. Eine Spalte der Tabelle zeigt Nummern an. Mir ist aufgefallen das die Sortierung nicht stimmt wenn man diese Spalte sortieren möchte. Also etwa

          0
          10
          10
          100
          40
          70

          Bei einem Test und Ursachenforschung habe ich dann gesehen das die Zahlen als "string" zurückkommen und daher die Sortierung nicht funktioniert.
          Ich habe jetzt aber eine "natural" Sortierung implementiert, da ich eh die Zahlen mit dem Prozentzeichen % darstellen möchte.

          vielen Dank und viele Grüße
          hawk

  2. Hallo hawk,

    Ich würde jetzt gerne das Array [rating] in Integer umwandeln.

    Da musst Du gar nichts auseinander- und wieder zusammenbauen.

    foreach ( $sqldata as $key => $data )  
       {  
          $sqldata[$key]['rating'] = intval($data['rating']);  
       }
    

    Mit lieben Grüßen

    Melvin Cowznofski

    --

    Melvin Cowznofski
    What – me worry?