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

Antworten:


31

Versuche dies:

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

anstelle von print_r($data)


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>";

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


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>";}

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.


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


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
            ]
        ]
    ]

<? 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";
  }
}


@ 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


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


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


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);

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/>";
}


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);

0
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}

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/>';
}
?>

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] => ''
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.