Zeigen Sie ein Array in einem lesbaren / hierarchischen Format an

95

Hier ist der Code zum Abrufen der Daten für mein Array

<?php
    $link = mysqli_connect('localhost', 'root', '', 'mutli_page_form');

    $query = "SELECT * FROM wills_children WHERE will=73";

    $result = mysqli_query($link, $query) or die(mysqli_error($link));

    if ($result = mysqli_query($link, $query)) {

    /* fetch associative array */
    if($row = mysqli_fetch_assoc($result)) {
        $data = unserialize($row['children']);
    }

    /* free result set */
    mysqli_free_result($result);
    }
?>

Wenn ich print_r ($ data) verwende, lautet es wie folgt:

Array ( [0] => Array ( [0] => Natural Chlid 1 [1] => Natural Chlid 2 [2] => Natural Chlid 3 ) ) 

Ich möchte es lesen als:

Natürliches Kind 1
Natürliches Kind 2
Natürliches Kind 3

Xavier
quelle

Antworten:

31

Versuche dies:

foreach($data[0] as $child) {
   echo $child . "\n";
}

anstelle von print_r($data)

Brian Driscoll
quelle
1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> Das hat super funktioniert, danke Brian!
Xavier
55
Warum um alles in der Welt ist dies die gewählte Antwort, wenn <pre> </ pre> die offensichtliche Wahl ist?
Cantsay
1
Dies funktioniert nicht, wenn Sie ein mehrdimensionales Array haben.
Alesana
3
@Alesana Ja, aber OP hatte kein mehrdimensionales Array. Ich denke, wie andere diese Antwort kommentiert haben, ist der Weg, den Sie gehen möchten <pre>print_r($data)</pre>. Es macht immer Spaß, einen neuen Kommentar zu einer über 5 Jahre alten Antwort zu sehen! :)
Brian Driscoll
2
Ah, in meinem Fall habe ich mit einem mehrdimensionalen Array gearbeitet. Ich habe noch keinen Kommentar hinterlassen. Als ich sah, dass niemand darauf hingewiesen hatte, dachte ich, dass dies eine perfekte Gelegenheit sein könnte!
Alesana
423

Anstatt

print_r($data);

Versuchen

print "<pre>";
print_r($data);
print "</pre>";
Phenex
quelle
3
Erwähnenswert ist auch, dass Sie trueprint_r als zweiten Parameter übergeben können, um die Daten als zu erhalten string. Jetzt können Sie return '<pre>'.print_r(User::all(), true);aus Ihrer Routendatei.
DutGRIFF
Ich mag diese Antwort auch, aber das OP wollte nur, dass die Strings gedruckt werden und nicht die Array-Indizes (wie es scheint). Und nur eindimensionale Daten. Normalerweise überprüfe ich einen Datensatz nur, bevor ich mit einer Lösung fortfahre. Daher funktioniert diese Lösung für solche Dinge viel besser.
Iopener
64
print("<pre>".print_r($data,true)."</pre>");
Shankar ARUL - jupyterdata.com
quelle
Dies ist ideal, da keine unnötigen Leerzeichen um Ihre Daten hinzugefügt werden.
Nichtigkeit
47

Ich habe eine Grundfunktion:

function prettyPrint($a) {
    echo "<pre>";
    print_r($a);
    echo "</pre>";
}

prettyPrint($data);

EDIT: Optimierte Funktion

function prettyPrint($a) {
    echo '<pre>'.print_r($a,1).'</pre>';
}

BEARBEITEN: Moar Optimierte Funktion mit Unterstützung für benutzerdefinierte Tags

function prettyPrint($a, $t='pre') {echo "<$t>".print_r($a,1)."</$t>";}
dito
quelle
7
Die beste Antwort bisher, und Sie können sie sogar noch weiter optimieren, wenn sie sehr oft mit Komma verwendet wird:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf
15

Ich denke var_export(), der vergessene Bruder von var_dump()hat die beste Ausgabe - es ist kompakter:

echo "<pre>";
var_export($menue);
echo "</pre>";

Übrigens: Es ist nicht immer notwendig zu benutzen <pre>. var_dump()und var_export()sind bereits formatiert, wenn Sie sich den Quellcode Ihrer Webseite ansehen.

Hexodus
quelle
Ich stimme var_export zu, musste es jedoch mit <pre> </ pre> kombinieren, da die Ergebnisse nicht im richtigen Format ausgegeben wurden.
Chaya Cooper
3
@ Chaya-Cooper Es ist auf der angezeigten Seite nicht richtig formatiert, aber ich denke, Hexodus bedeutete, dass es "im Quellcode Ihrer Webseite" formatiert ist -> versuchen Sie das Menü "Quelltext anzeigen" oder Strg-U in Firefox
fpierrat
@fpierrat Ja, genau das habe ich gemeint. Vielen Dank für die Klarstellung.
Hexodus
1
Ein Vorteil dieses Ansatzes besteht darin, dass die Ausgabe als gültiges PHP formatiert ist, sodass Sie sie bei Bedarf direkt wieder in Ihren Code kopieren / einfügen können.
Sean the Bean
13

Wenn jemand Arrays so cool anzeigen muss;) Verwenden Sie diese Methode. Diese wird auf Ihrer Browserkonsole gedruckt

function console($obj)
{
    $js = json_encode($obj);
    print_r('<script>console.log('.$js.')</script>');
}

Sie können wie folgt verwenden ..

console($myObject);

Die Ausgabe wird so sein .. so cool wie !!

Geben Sie hier die Bildbeschreibung ein

Shakee93
quelle
4
foreach($array as $v) echo $v, PHP_EOL;

UPDATE : Eine komplexere Lösung wäre:

 $test = [
    'key1' => 'val1',
    'key2' => 'val2',
    'key3' => [
        'subkey1' => 'subval1',
        'subkey2' => 'subval2',
        'subkey3' => [
            'subsubkey1' => 'subsubval1',
            'subsubkey2' => 'subsubval2',
        ],
    ],
];
function printArray($arr, $pad = 0, $padStr = "\t") {
    $outerPad = $pad;
    $innerPad = $pad + 1;
    $out = '[' . PHP_EOL;
    foreach ($arr as $k => $v) {
        if (is_array($v)) {
            $out .= str_repeat($padStr, $innerPad) . $k . ' => ' . printArray($v, $innerPad) . PHP_EOL;
        } else {
            $out .= str_repeat($padStr, $innerPad) . $k . ' => ' . $v;
            $out .= PHP_EOL;
        }
    }
    $out .= str_repeat($padStr, $outerPad) . ']';
    return $out;
}

echo printArray($test);

Dies druckt aus:

    [
        key1 => val1
        key2 => val2
        key3 => [
            subkey1 => subval1
            subkey2 => subval2
            subkey3 => [
                subsubkey1 => subsubval1
                subsubkey2 => subsubval2
            ]
        ]
    ]
Yaronius
quelle
<? php foreach ($ data as $ v) echo $ v, PHP_EOL; ?> zeigt "Array"
Xavier
1
Okay, dann sollten Sie zweimal foreach ($ raw als $ array) foreach ($ array als $ v) echo $ v, PHP_EOL;
Yaronius
3

print_r()ist hauptsächlich zum Debuggen. Wenn Sie es in diesem Format drucken möchten, durchlaufen Sie das Array und drucken Sie die Elemente aus.

foreach($data as $d){
  foreach($d as $v){
    echo $v."\n";
  }
}
Rakete Hazmat
quelle
Xavier
@ Xavier: Hast du den aktualisierten Code in meiner Antwort ausprobiert? Sie müssen beide Arrays durchlaufen. $dataist ein Array von Arrays.
Rocket Hazmat
und dein Code hat auch perfekt funktioniert. Ich habe gerade das / n in ein <br /> geändert
Xavier
3

Dies kann eine einfachere Lösung sein:

echo implode('<br>', $data[0]);
Beta-Projekte
quelle
2

Ich gehe davon aus, dass man print_r zum Debuggen verwendet. Ich würde dann vorschlagen, Bibliotheken wie Kint zu verwenden . Dies ermöglicht die Anzeige großer Arrays in einem lesbaren Format:

$data = [['Natural Child 1', 'Natural Child 2', 'Natural Child 3']];
Kint::dump($data, $_SERVER);

Geben Sie hier die Bildbeschreibung ein

Zendka
quelle
1
Dies ist keine Vanille-PHP-Lösung, bietet aber definitiv eine nützliche und lesbare Ausgabe!
Sean the Bean
1
<?php 
//Make an array readable as string
function array_read($array, $seperator = ', ', $ending = ' and '){
      $opt = count($array);
      return $opt > 1 ? implode($seperator,array_slice($array,0,$opt-1)).$ending.end($array) : $array[0];
}
?>

Ich benutze dies, um meinen Besuchern ein hübsches gedrucktes Array zu zeigen

Dreiundachtzig
quelle
1

Sehr schöne Möglichkeit, formatiertes Array in PHP mit der Funktion var_dump zu drucken.

 $a = array(1, 2, array("a", "b", "c"));
 var_dump($a);
Muhammad
quelle
1

Ich benutze dies, um Schlüssel und ihre Werte abzurufen. $ Qw = mysqli_query ($ connection, $ query);

while ( $ou = mysqli_fetch_array($qw) )
{
    foreach ($ou as $key => $value) 
    {
            echo $key." - ".$value."";
    }
    echo "<br/>";
}
uutsav
quelle
1

Ich würde nur Online-Tools verwenden.

Elie GAKUBA
quelle
Ich habe dies gerade aktualisiert, um es viel robuster zu machen, danke für den Link.
Phillihp
1

Einzeiler für eine schnelle und einfache JSON-Darstellung:

    echo json_encode($data, JSON_PRETTY_PRINT);

Wenn Sie Composer bereits für das Projekt verwenden, benötigen Sie symfony / yaml und:

    echo Yaml::dump($data);
Iain H.
quelle
0
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}
powtac
quelle
0

Für einzelne Arrays, die Sie implodieren können, ist das Drucken sauberer.

<?php
$msg = array('msg1','msg2','msg3');
echo implode('<br />',$msg);
echo '<br />----------------------<br/>';

echo nl2br(implode("\n",$msg));
echo '<br />----------------------<br/>';
?>

Für mehrdimensionale Arrays müssen Sie mit einer Art Schleife kombinieren.

<?php
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
$msgs[] = $msg;
foreach($msgs as $msg) {
    echo implode('<br />',$msg);
    echo '<br />----------------------<br/>';
}
?>
mjaning
quelle
0

Dadurch wird versucht, die print_r()Ausgabeformatierung in Konsolenanwendungen zu verbessern :

function pretty_printr($array) {

  $string = print_r($array, TRUE);

  foreach (preg_split("/((\r?\n)|(\r\n?))/", $string) as $line) {

    $trimmed_line = trim($line);

    // Skip useless lines.
    if (!$trimmed_line || $trimmed_line === '(' || $trimmed_line === ')' || $trimmed_line === 'Array') {
      continue;
    }

    // Improve lines ending with empty values.
    if (substr_compare($trimmed_line, '=>', -2) === 0) {
      $line .=  "''";
    }

    print $line . PHP_EOL;
  }
}

Beispiel:

[activity_score] => 0
[allow_organisation_contact] => 1
[cover_media] => Array
        [image] => Array
                [url] => ''
        [video] => Array
                [url] => ''
                [oembed_html] => ''
        [thumb] => Array
                [url] => ''
[created_at] => 2019-06-25T09:50:22+02:00
[description] => example description
[state] => published
[fundraiser_type] => anniversary
[end_date] => 2019-09-25
[event] => Array
[goal] => Array
        [cents] => 40000
        [currency] => EUR
[id] => 37798
[your_reference] => ''
Pere
quelle