Eine hübschere / informativere Var_dump-Alternative in PHP? [geschlossen]

130

Jeder anständige PHP - Programmierer hat ein print_roder var_dumpWrapper sie verwenden, Liebe und assign Shortcut - Tasten auf, warum wir nicht unsere Lieblinge teilen .

Raveren
quelle
39
Ich benutze nur Echo '<pre>'; print_r ($ var); exit; Ich schließe es nicht einmal. Ich denke, ich bin nicht anständig
Funky Dude
Ich habe den Link so bearbeitet, dass er auf Github verweist, wo ich die Kint-Entwicklung fortsetze. Wenn Sie immer noch Probleme damit haben, lassen Sie es mich bitte auf irgendeine Weise wissen.
Raveren
1
Hey, Kint ist cool! Es hat mir nur den Tag gerettet.
István Ujj-Mészáros
2
Warum ist eine Frage, die zu 100% eine Werbebotschaft eines Programms ist, in einer "Ich mache meine eigene var_dump ()" - Version? Die erste Frage wäre, warum eine Produktwerbung als Frage erlaubt ist.
m3nda
11
Weil ich das Tool mehr als ein Jahr später gemacht habe, nachdem ich die Frage gestellt hatte. Ich weiß nicht, was Sie stört. Ich habe ein ausgereiftes Open-Source-Tool mit mehr als 10.000 Zeilen erstellt und verbessere es Jahre später ständig. Ich habe meine eigene Antwort auf die Frage gegeben - wie es in SO Tradition ist.
Raveren

Antworten:

70

Ein volles Jahr Zeit und Arbeit, nachdem ich dies gefragt habe, habe ich endlich meine Version von var_dump, Kint, als Open-Source-Version bereitgestellt. Lesen Sie darüber auf der Projektseite oder direkt in Github .

Hier ist ein Screenshot:

kint

Entschuldigung für den Stecker :)


BEARBEITEN: Ich möchte die Kommentatoren nur daran erinnern, dass dies kein Support-Forum ist. Wenn Sie Probleme haben oder eine Funktion wünschen, reichen Sie bitte ein Problem ein . Support, der Kommentare anfordert, wird zum Löschen markiert.

Raveren
quelle
Ich musste die Schriftgröße ändern und den CSS-Code verschönern, aber gute Arbeit, ich mag es ... von einem langjährigen Krumo-Benutzer
Quamis
1
Welche Änderungen haben Sie vorgenommen? Wenn Sie glauben, dass es sich um eine Verbesserung handelt, können Sie mir die Änderungen an [email protected]
raveren
Ich war an Krumo gewöhnt und wollte kleinere Schriftarten. Außerdem habe ich den CSS-Code verschönert. Nichts, was als tatsächliche Verbesserung bezeichnet werden kann, eher wie eine alte Gewohnheit :)
Quamis
Nun, die Idee war, dass das CSS zusammen mit dem js komprimiert werden soll, um die tatsächliche Ausgabe so wenig wie möglich zu stören. Natürlich war auch ein ziemliches Einrücken der generierten Quelle geplant, aber ich habe derzeit keine Zeit, mich Kint zu widmen.
Raveren
2
Nur als Beispiel zeigt Kint geschützte und private Variablen an, wenn Sie ein Objekt sichern, krumo nicht (da nur die ersteren Reflexionsklassen verwenden, nehme ich an). Im Allgemeinen fand ich Kint überlegen; obwohl ich auch das CSS optimieren musste, um es benutzerfreundlicher zu machen (diese riesige Schriftart funktioniert nicht sehr gut, wenn Tonnen verschachtelter Objekte ausgegeben werden). Oh und der Code dahinter ist kein Chaos, etwas, was man von Krumo nicht sagen kann (sorry Krumo-Autor!)
Mahn
45

Ich bevorzuge die var_dumpFunktion, wie sie von der Xdebug-Erweiterung bereitgestellt wird : Installieren Sie einfach die Erweiterung (einfach, sowohl unter Windows als auch unter Linux) und erhalten Sie var_dumpeine bessere Ausgabe:

  • besser formatieren
    • HTML
    • Farben
  • und Sie haben Optionen, um festzulegen, wie viele Informationen angezeigt werden sollen

Und ein kurzer Screenshot:

xdebug


Und natürlich bringt Xdebug eine Menge anderer nützlicher Dinge mit, wie Remote-Debugging (dh grafisches Debuggen Ihrer PHP-Anwendung, zum Beispiel in Eclipse PDT) , Profiling, ...

Pascal MARTIN
quelle
1
Ich muss diese xdebug-Formatierungsklasse in einem gemeinsam genutzten Host verwenden. Gibt es eine Möglichkeit, es in mein persönliches Projekt aufzunehmen?
Anyul Rivas
1
Wenn Sie nicht Administrator (root) des Servers sind, werden Sie wahrscheinlich nicht in der Lage sein wird , eine PHP - Erweiterung zu installieren (ich habe noch nie einen Shared - Hosting - Service zu sehen , die man installieren würde PHP - Erweiterungen zu installieren) ; Nein, Sie können Xdebug nicht verwenden (die Installation auf einem Produktionsserver ist im Allgemeinen keine gute Idee: Es handelt sich schließlich um eine Debugging-Erweiterung) . Sie müssen auf eine PHP-basierte Implementierung einer Funktion zur Ausgabe von Variablen zurückgreifen (siehe einige andere Antworten)
Pascal MARTIN
1
Ja, ich brauchte nur die Klasse, um mir eine Ausgabe zu senden, wenn ein Fehler auftritt.
Anyul Rivas
34

Ich habe mein eigenes geschrieben: REF ( Demo ):

r () Ausgabe

Es ist geplant, nur Text-Rendering hinzuzufügen und Informationen über den Eingabeausdruck anzuzeigen, wie es Kint tut ...

geiler Arsch
quelle
4
Gute Arbeit, sehr schönes Werkzeug
ssuperczynski
2
REF ist großartig, farbenfroh und schnell. Ich benutze es die ganze Zeit.
Marty McGee
2
Tolles Tool, ich habe gerade darauf umgestellt. Vielen Dank!
Andris
Einige Leute benutzen Komponisten, na ja ... nicht ich. Wenn Sie ein erstellen, dllwerde ich dieses "Debug" verwenden. Danke und gute Arbeit!
Alex
27

Hier ist meine, die ich inline benutze, sehr nützlich:

$pretty = function($v='',$c="&nbsp;&nbsp;&nbsp;&nbsp;",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'&lt;NULL&gt;':"<strong>$v</strong>");}return$r;};

echo $pretty($some_variable);
Guillermo Phillips
quelle
2
Ich liebe diese Funktion - einfach und klar und habe ich schon sehr einfach erwähnt :)
derekdreery
Vielen Dank. Ich benutze es die ganze Zeit. Sollte wirklich in PHP eingebaut sein. Mit dem zweiten Parameter können Sie Ihre eigene Formatierung vornehmen. zB echo $ hübsch ($ some_variable, "-");
Guillermo Phillips
7
Dies kombiniert wunderbar die schlechtesten Funktionen von print_r, var_dump und var_export. Kein HTML-Escapezeichen, akzeptiert nur einzelne Parameter, hängt an der Rekursion, kann keine Ausgabe zurückgeben, und nur um das Ganze abzurunden , ist es völlig unlesbar . Ich möchte kein Arschloch sein, aber die Kommentare lassen es einfach so perfekt erscheinen.
Raveren
Vielen Dank für Ihren Kommentar @Raveren. Wenn Sie genauer sein könnten, werde ich meine Antwort verbessern.
Guillermo Phillips
2
IMO ist die beste einzeilige Lösung einfach function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump ist eine sehr ausführliche Funktion, die alle PHP-Randfälle (von denen es LOTS gibt) behandelt und zu 100% stabil ist, obwohl sie nicht so lesbar ist. Aber am Ende des Tages, wenn Sie feststellen, dass Ihre Implementierung für Sie am besten ist, sollten Sie sie auf jeden Fall verwenden.
Raveren
16

Sie suchen nach Krumo ( Warnung, Chrome-Warnungen für Malware ).

Einfach ausgedrückt ist Krumo ein Ersatz für print_r () und var_dump (). Per Definition ist Krumo ein Debugging-Tool (zunächst für PHP4 / PHP5, jetzt nur für PHP5), das strukturierte Informationen zu jeder PHP-Variablen anzeigt.

Pekka
quelle
Das ist brilliant! Vielen Dank. +1
the_drow
2
Als ich es versuchte, war es kaputt. Ich habe es gemeldet, aber keine Antwort und keine neue Version
Mawg sagt, Monica
2
@ Pekka Der Link löst eine Malware-Warnung in Chrome aus.
Tim Post
Heute wurde krumo von diesem Typen aktualisiert github.com/mmucklo/krumo (aber Kint kann besser sein, mehr Details)
lolesque
9

I Liebe FirePHP und Firebug

  • Es schreibt die Protokollierungsinformationen mithilfe von Headern aus, sodass AJAX nicht beschädigt wird.
  • Bietet Ihnen eine sehr schöne grafische Darstellung der Variablen / Objekte, die Sie protokollieren
  • Kann den Dateinamen und die Zeilennummer anzeigen, in denen jede Protokollanweisung vorkommt
  • Einfach in Ihrem Projekt zu verwenden, entweder mit einer prozeduralen oder einer objektorientierten API
Johrn
quelle
8

Meine (teilweise) Lösung hierfür ist das einfache Hinzufügen einer solchen Funktion (mit Google Chrome):

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>

Drücken Sie Strg + Umschalt + J (öffnet die Konsole) und Sie finden dort die JSON-Struktur. Noch nützlicher für einen hübschen Ausdruck von JSON-Antworten.

Tim
quelle
8

Ein vollständiges Beispiel für das, was ich benutze ...

<pre>

<?php


//*********** Set up some sample data

$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);

$options = array(
  'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
  2=>'Car',
  4=>'Bus',
  'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));


//*********** Define the function

function dump($data, $indent=0) {
  $retval = '';
  $prefix=\str_repeat(' |  ', $indent);
  if (\is_numeric($data)) $retval.= "Number: $data";
  elseif (\is_string($data)) $retval.= "String: '$data'";
  elseif (\is_null($data)) $retval.= "NULL";
  elseif ($data===true) $retval.= "TRUE";
  elseif ($data===false) $retval.= "FALSE";
  elseif (is_array($data)) {
    $retval.= "Array (".count($data).')';
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix [$key] = ";
      $retval.= dump($value, $indent);
    }
  }
  elseif (is_object($data)) {
    $retval.= "Object (".get_class($data).")";
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix $key -> ";
      $retval.= dump($value, $indent);
    }
  }
  return $retval;
}


//*********** Dump the data

echo dump($options);

?>
</pre>

Ausgänge ...

Array (4)
 [Orchestra] = Array (5)
 |   [1] = String: 'Strings'
 |   [8] = String: 'Brass'
 |   [9] = Object (stdClass)
 |   |   a -> Number: 123
 |   |   pl -> Number: 44
 |   |   l -> Array (2)
 |   |   |   [0] = Number: 31
 |   |   |   [1] = Number: 32
 |   [3] = String: 'Woodwind'
 |   [16] = String: 'Percussion'
 [2] = String: 'Car'
 [4] = String: 'Bus'
 [TV] = Array (5)
 |   [21] = String: 'Only Fools'
 |   [215] = String: 'Brass Eye'
 |   [23] = String: 'Vic Bob'
 |   [44] = NULL
 |   [89] = FALSE
Anthony Scaife
quelle
1
Ich habe \ n in PHP_EOL geändert und dies funktioniert gut, wenn ich PHP aus dem CMD von
Windows verwende
7

Hier ist mein:

class sbwDebug
{
    public static function varToHtml($var = '', $key = '')
    {
        $type = gettype($var);
        $result = '';

        if (in_array($type, ['object', 'array'])) {
            $result .= '
        <table class="debug-table">
            <tr>
            <td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
            <td class="debug-value-cell">';

            foreach ($var as $akey => $val) {
                $result .= sbwDebug::varToHtml($val, $akey);
            }
            $result .= '</td></tr></table>';
        } else {
            $result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
        }

        return $result;
    }
}

Gestylt mit:

table.debug-table {
  padding: 0;
  margin: 0;
  font-family: arial,tahoma,helvetica,sans-serif;
  font-size: 11px;
}

td.debug-key-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

td.debug-value-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

div.debug-item {
  border-bottom: 1px dotted #AAAAAA;
}

span.debug-label {
  font-weight: bold;
}
Damon
quelle
2
Eigentlich nicht schlecht. Wäre wahrscheinlich mehr gewählt worden, wenn Sie ein Beispiel für die Ausgabe gezeigt hätten.
Mawg sagt, Monica wieder
@acSlater Funktioniert für mich, Sie müssen nur die sbwDebugKlasse erstellen, die er vergessen hat zu posten, und die Funktion darin einfügen .
Dennis98
6

Ich habe kürzlich eine kostenlose Chrome-Erweiterung (in Arbeit) entwickelt, um meine Var-Dumps ohne Bibliotheken, ohne Pre-Tags und ohne Installation für jede einzelne App zu verschönern. Alles erledigt mit JavaScript und regEx. Alles was Sie tun müssen, ist die Erweiterung zu installieren und los geht's. Ich arbeite auch an einer Firefox-Version. Hier ist die GitHub-Seite. Ich hoffe, es bald in den Chrome- und Firefox-Webstores verfügbar zu haben!

https://github.com/alexnaspo/var_dumpling

Hier ist eine Beispielausgabe:

Beispielausgabe

Alex Naspo
quelle
6
netter Kerl! Habe gerade deine Erweiterung heruntergeladen und sie funktioniert perfekt! Vielen Dank!
Coryj
5
Alter ... danke. Ich habe für eine Weile nach so etwas gesucht
Broadbent
1
Unwirklich. Beste Option noch!
Christian
Versucht mit Firefox 15, sagte es nicht kompatibel. Gibt es eine Chance, dies zu umgehen?
Cyberfly
1
Das ist wunderschön, ich wünschte, ich hätte es früher gefunden!
3

Tracy hat eine schöne zusammenklappbare Ausgabe mit der Funktion dump () .

rikiless
quelle
2

Diese schicken Bibliotheken sind großartig ... außer dem Overhead. Wenn Sie einen einfachen, hübschen var_dump möchten, der unendlich viele Parameter akzeptiert, probieren Sie meine Funktion aus. Es fügt einfaches HTML hinzu. Datenattribute werden ebenfalls hinzugefügt. Wenn Sie HTML5 verwenden, werden sie von niedrigeren Versionen einfach ignoriert, aber es ist einfach, Elemente in der Browserkonsole zu öffnen und ein wenig mehr Informationen zu erhalten, wenn das, was Sie auf dem Bildschirm sehen, nicht ausreicht.

Das Layout ist sehr einfach, kein Overhead. Bietet eine Menge Informationen für jeden Parameter, einschließlich Dinge wie gettypeund sogar classNamen für Objektspeicherauszüge (einschließlich XML). Es hat sich bewährt, ich benutze es seit Jahren.

function preDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
        foreach (func_get_args() as $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
            $sb .= '<pre data-type="'.gettype($arg).'"';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                    $sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= json_encode($arg);
                    break;
                case "string":
                    $sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= $arg;
                    break;
                default:
                    $sb .= ' data-dump="var_dump"';
                    if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
                    $sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
                    if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
                    $sb .= '</b></p><p>';
                    ob_start();
                    var_dump($arg);
                    $sb .= ob_get_clean();
                    if (ob_get_length()) ob_end_clean();
            }
            $sb .= '</p></pre>';
        }
        $sb .= '</fieldset></div>';
    }
    else {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Und wenn Sie Codeigniter verwenden, fügen Sie es auch EXTREM EINFACH zu Ihrem CI hinzu. Gehen Sie zuerst zu application/config/autoload.phpund stellen Sie sicher, dass das eingeschaltet helper 'string'ist.

$autoload['helper'] = array( 'string' ); 

Erstellen Sie dann einfach eine Datei mit dem Namen MY_string_helper.phpin application/helpersund fügen Sie die Funktion einfach in eine typische ifAnweisung zur Existenzprüfung ein.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
    if (!function_exists('preDump')) {
        function preDump() {
            ...
        }
    }
//  DON'T CLOSE PHP

| ODER |, wenn Sie eine andere Richtung einschlagen möchten.

Das folgende Snippet ist das gleiche wie oben, außer dass Ihre Variablen in der Browserkonsole angezeigt werden. Dies kann manchmal das Debuggen von SQL-Objektaufrufen und anderen Array- und Objektaufrufen erleichtern, bei denen der Schlüsselname oder was auch immer fehlt.

function consoleDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<script type="text/javascript">console.log("<" + new Array('.(count($args) < 10 ? '49': '48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';

        foreach (func_get_args() as $i => $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/', 'consoleDump: '.(count($args)-1), $sb); continue; }
            $sb .= '{ "type": "'.gettype($arg).'", ';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                case "string":
                    $sb .= '"value": '.json_encode($arg);
                    break;
                default:
                    $sb .= '"value": '.json_encode($arg);
                    if (is_object($arg) || is_array($arg)) $sb .= ', "count": '.json_encode(count((array)$arg));
                    if (is_object($arg)) $sb .= ', "objectClass": "'.get_class($arg).'"';
            }
            $sb .= '}';
            if ($i < count($args)-1) $sb .= ', ';
        }
        $sb .= ']); console.log("<" + new Array(120).join("-") + ">"); </script>';
    }
    else {
        $sb = '<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Funktioniert mit allem!

consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array( 'one' => 'bob', 'two' => 'bill' ), (object)array( 'one' => 'bob', 'two' => 'bill' ));


<------------------------------------------------[consoleDump: 6 items]------------------------------------------------->
[Object, Object, Object, Object, Object, Object] 
// This drops down to show your variables in JS objects, like:
    0: Object
        count: 4
        objectClass: "SimpleXMLElement"
        type: "object"
        value: Object
        __proto__: Object
        // ...etc...
<-----------------------------------------------------------------------------------------------------------------------> 
SpYk3HH
quelle
1
Warum sollte man sich über vernachlässigbare Leistungseinbußen in einem Entwicklungstool Sorgen machen? Diese Funktion ist buchstäblich echo '<pre>';var_dump($var);echo '</pre>';plus Text mit null Wertschöpfung.
Raveren
@ Raveren ja außer preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an Echo 'pre'; var_dump` mit einigen simple htmlum ihn herum, kein 0-wertschöpfender Text. lol kik. Wenn es dir nicht gefällt, benutze es nicht. Nur ein Vorschlag.
SpYk3HH
@ Raveren Und wenn dir das gefallen hat ... du wirst mein Update wirklich lieben: P
SpYk3HH
1

PHP Array Beautifier Dieses einfache Tool verwendet eine in PHP ausgegebene Array- oder Objektausgabe, z. B. eine print_r () - Anweisung, und formatiert sie in Farbcodierung, um Ihre Daten leicht lesen zu können. http://phillihp.com/toolz/php-array-beautifier/

Ganbolor Buddorj
quelle
funktioniert nicht mit var_dump-Ausgabe, bricht Anführungszeichen, sieht für größere Dumps äußerst verwirrend aus.
Raveren
1

Noch eine einheimische Version:

http://github.com/perchten/neat_html

Ich denke gerne, dass es ziemlich flexibel ist. Es zielt nicht auf eine bestimmte Ausgabeumgebung ab, verfügt jedoch über eine Reihe optionaler Argumente, mit denen Sie angeben können, warum die Ausgabe / der Druck oder das Verhalten geändert werden sollen, sowie über einige dauerhafte Einstellungen.

Alastair Brayne
quelle
1

Wenn Sie mit sehr großen Arrays in PHP arbeiten, kann diese Funktion helfen:

function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}

Grundsätzlich wird das gesamte Array ausgegeben, wobei sich jedes Element in einer separaten Zeile befindet. Dies ist hilfreich, um die richtigen vollständigen Pfade für bestimmte Elemente zu finden.

Beispielausgabe:

$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';

Siehe: Wie exportiere ich ein PHP-Array, bei dem sich jedes Schlüssel-Wert-Paar in einer separaten Zeile befindet?

Kenorb
quelle
1

Ich bin überrascht, dass niemand den einfachsten (wenn auch nicht sehr hübschen) Code erwähnt hat. Wenn Sie wollen einfach nur eine lesbare Ausgabe (keine Farben oder Vertiefung) zu erhalten, eine einfache <pre>um ein var_dumpWerk, wie in:

echo "<pre>";
var_dump($myvariable);
echo "</pre>";

Viel geringer kann der Overhead nicht sein!

Sablefoste
quelle
0

Ich bevorzuge das Debuggen von https://github.com/hazardland/debug.php , einer Bibliothek, die nur eine einzige Funktion enthält, die als Debug bezeichnet wird (Sie können diese Funktion einfach in Ihr Projekt oder in Ihre Bibliothek kopieren) . Die typische HTML-Ausgabe von debug () sieht folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Sie können Daten jedoch auch als einfachen Text mit derselben Funktion (mit 4 durch Leerzeichen eingerückten Registerkarten) wie folgt ausgeben (und sie bei Bedarf sogar in einer Datei anmelden):

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"
BIOHAZARD
quelle
0

TVarDumper

Dies ist ein großartiges Tool, das die fehlerhafte PHP-Funktion ersetzen soll var_dump und print_rdie rekursiv referenzierten Objekte in einer komplexen Objektstruktur korrekt identifizieren kann. Es hat auch eine rekursive Tiefensteuerung, um eine unbestimmte rekursive Anzeige einiger besonderer Variablen zu vermeiden.

Siehe : TVarDumper.php.


Für andere alternative Lösungen , die mehr Vorteile gegenüber sehen var_dumpund print_rund kann zirkuläre Verweise unterstützen, überprüfen Sie bitte: Mit print_r und var_dump mit zirkulärer Referenz .


Weitere Ideen finden Sie auch unter: Wie debuggen Sie PHP-Skripte?

Kenorb
quelle
0

Meins ist einfacher, für mich habe ich nicht viel Wissen / Zeit, um die Infrastruktur zu ändern, installiere xdebug usw. usw.

Und in anderen Fällen brauchen Sie zum Beispiel nicht viel für eine einfache WP-Website

Also benutze ich:

highlight_string("\n<?" . var_export($var, true) . "?>\n");

das hilft mir wirklich sehr.

Aber weil ich die DevConsole-Umgebung bevorzuge, verwende ich diese fantastische, aber einfache Funktion:

https://codeinphp.github.io/post/outputting-php-to-browser-console/

Kleiner Tweak:

<?php 

/**
 * Logs messages/variables/data to browser console from within php
 *
 * @param $name: message to be shown for optional data/vars
 * @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
 * @param $jsEval: whether to apply JS eval() to arrays/objects
 *
 * @return none
 * @author Sarfraz
 */
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
     if (! $name) return false;

     $isevaled = false;
     $type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';

     if ($jsEval && (is_array($data) || is_object($data)))
     {
          $data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
          $isevaled = true;
     }
     else
     {
          $data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
     }

     # sanitalize
     $data = $data ? $data : '';
     $search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
     $replace_array = array('"', '', '', '\\n', '\\n');
     $data = preg_replace($search_array,  $replace_array, $data);
     $data = ltrim(rtrim($data, '"'), '"');
     $data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";

$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback

console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;

     echo $js;
} # end logConsole
Locke
quelle
0

Eine andere Option ist zu

composer require symfony/var-dumper --save-dev

Dann verwenden Sie in Ihrer Datei nur dump($var) und Sie erhalten eine Ausgabe wie dieseGeben Sie hier die Bildbeschreibung ein

GardenRouteGold
quelle
0

Ich musste hier eine weitere Antwort hinzufügen, weil ich die Schritte in den anderen Lösungen nicht wirklich durchgehen wollte. Es ist extrem einfach und erfordert keine Erweiterungen, enthält usw. und ist das, was ich bevorzuge. Es ist sehr einfach und sehr schnell.

Zuerst einfach json_encode die fragliche Variable:

echo json_encode($theResult);

Kopieren Sie das Ergebnis, das Sie erhalten, in den JSON-Editor unter http://jsoneditoronline.org/. Kopieren Sie es einfach in den linken Bereich, klicken Sie auf Kopieren> und es druckt den JSON in einem wirklich schönen Baumformat.

Jedem sein eigenes, aber hoffentlich hilft dies einigen anderen, eine weitere nette Option zu haben! :) :)

zpert
quelle