Ankündigung

Einklappen
Keine Ankündigung bisher.

var_dump Ausgabe in ein Array konvertieren

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

  • var_dump Ausgabe in ein Array konvertieren

    Das für die Helfer hier bei Problemen mit Arrays mal benutzbare Testdaten gepostet werden wird wohl ein ewiger Traum bleiben. Stattdessen werden ellenlange var_dump Ausgaben gepostet.
    Habe da eine Funktion gefunden (Quelle leider nicht gemerkt) die ein var_dump string von einen Array in ein PHP-Array konvertiert und nach meinen Erfahrungen gut funktioniert. Habe diese nur ein wenig angepasst, um den Autoloader in meiner Testconsole nutzen zu können:
    Benutzung:
    PHP-Code:
    $var_dump_output 'array(1) { [0]=> array(4) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> array(3) { [0]=> int(3) [1]=> int(4) [2]=> int(5) } ["d"]=> string(3) "End" } }';
    $testData Helper::unvar_dump($var_dump_output);
    debug::write($testData);  //Testausgabe 
    Ausgabe:
    PHP-Code:
    array (
      
    =>
      array (
        
    'a' => 1,
        
    'b' => 2,
        
    'c' =>
        array (
          
    => 3,
          
    => 4,
          
    => 5,
        ),
        
    'd' => "End",
      ),

    Die Funktion:
    PHP-Code:
    <?php
    class Helper{
      public static function 
    unvar_dump($str) {
        
    $str str_replace(array("\r","\n"),"",$str);
        if (
    strpos($str"\n") === false) {
            
    //Add new lines:
            
    $regex = array(
                
    '#(\\[.*?\\]=>)#',
                
    '#(string\\(|int\\(|float\\(|array\\(|NULL|object\\(|})#',
            );
            
    $str preg_replace($regex"\n\\1"$str);
            
    $str trim($str);
        }
        
    $regex = array(
            
    '#^\\040*NULL\\040*$#m',
            
    '#^\\s*array\\((.*?)\\)\\s*{\\s*$#m',
            
    '#^\\s*string\\((.*?)\\)\\s*(.*?)$#m',
            
    '#^\\s*int\\((.*?)\\)\\s*$#m',
            
    '#^\\s*bool\\(true\\)\\s*$#m',
            
    '#^\\s*bool\\(false\\)\\s*$#m',
            
    '#^\\s*float\\((.*?)\\)\\s*$#m',
            
    '#^\\s*\[(\\d+)\\]\\s*=>\\s*$#m',
            
    '#\\s*?\\r?\\n\\s*#m',
        );
        
    $replace = array(
            
    'N',
            
    'a:\\1:{',
            
    's:\\1:\\2',
            
    'i:\\1',
            
    'b:1',
            
    'b:0',
            
    'd:\\1',
            
    'i:\\1',
            
    ';'
        
    );
        
    $serialized preg_replace($regex$replace$str);

        
    $serialized preg_replace_callback(
            
    '#\\s*\\["(.*?)"\\]\\s*=>#',
            function(
    $match){
              return 
    "s:".strlen($match[1]).':"'.$match[1].'"';
            },
            
    $serialized
        
    );

        
    $serialized preg_replace_callback(
            
    '#object\\((.*?)\\).*?\\((\\d+)\\)\\s*{\\s*;#',
                function(
    $match){
                  return 
    "O:".strlen($match[1]).':"'.$match[1].'":'.$match[2].":{";
                },
            
    $serialized
        
    );
        
    $serialized preg_replace(
            array(
    '#};#''#{;#'),
            array(
    '}''{'),
            
    $serialized
        
    );

        return 
    unserialize($serialized);
      }

    }
    LG jspit
    PHP-Klassen auf github


  • #2
    Quelle: SO

    https://stackoverflow.com/questions/...array-variable

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

    Kommentar


    • #3
      MOD: Verschoben von Board-Support
      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


      • #4
        würde im genannten Beispiel nicht ein var_export genügen? Wenn´s brennt könnten wir ja generell um einen var_export bitten.

        Kommentar


        • #5
          Klar, ein Versuch den Fragesteller höflichst um benutzbare Testdaten zu bitten sollte nicht unterbleiben.
          In der Wissenssammlung ist dafür eigens eine Funktion zu finden, welche im Gegensatz zu var_export() sogar Arrays mit stdClasses berücksichtigt.
          Hab es aber oft genug erlebt das eine solche Bitte überlesen/ignoriert wird und die Diskussion zum Thema hier im Forum in vollen Gang ist.
          Für diesen Fall kann dann jeder selbst entscheiden ob er zu obiger Funktion greifen möchte.

          LG jspit
          PHP-Klassen auf github

          Kommentar

          Lädt...
          X