Visualizza un array in un formato leggibile / gerarchico


95

Ecco il codice per estrarre i dati per il mio 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);
    }
?>

Quando uso print_r ($ data) si legge come:

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

Vorrei che leggesse come:

Bambino naturale 1
Bambino
naturale 2 Bambino naturale 3

Risposte:


31

Prova questo:

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

al posto di print_r($data)


1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> questo ha funzionato alla grande, grazie Brian!
Xavier

55
perché diavolo è questa la risposta scelta quando <pre> </pre> è la scelta più ovvia?
cantsay

1
Questo non funzionerà se hai un array multidimensionale.
Alesana

3
@Alesana Sì, ma OP non aveva un array multidimensionale. Penso che come altri hanno commentato questa risposta, il modo in cui vuoi andare sia <pre>print_r($data)</pre>. Tuttavia, è sempre divertente vedere un nuovo commento su una risposta di 5+ anni! :)
Brian Driscoll

2
Ah, nel mio caso stavo lavorando con un array multidimensionale. Non ho lasciato un commento prima, quindi quando ho visto che nessun altro me lo aveva fatto notare ho pensato che potesse essere un'opportunità perfetta!
Alesana

423

Invece di

print_r($data);

provare

print "<pre>";
print_r($data);
print "</pre>";

3
Vale anche la pena ricordare che puoi passare truecome secondo parametro a print_r per ottenere i dati come string. Ora puoi return '<pre>'.print_r(User::all(), true);dal tuo file dei percorsi.
DutGRIFF

Mi piace anche questa risposta, ma l'OP voleva solo stampare le stringhe e non gli indici dell'array (sembra). E solo dati unidimensionali. Di solito lo faccio solo per controllare un recordset di dati prima di continuare con una soluzione, quindi questa soluzione funziona molto meglio per cose del genere.
iopener


47

Ho una funzione di base:

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

prettyPrint($data);

EDIT: funzione ottimizzata

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

EDIT: funzione Moar Optimized con supporto tag personalizzato

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

7
La migliore risposta finora, e puoi anche ottimizzarla di più se viene usata molto spesso con la virgola:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf

15

Penso che var_export()il fratello dimenticato di var_dump()abbia il miglior output - è più compatto:

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

A proposito: non è sempre necessario usare <pre>. var_dump()e var_export()sono già formattati quando dai un'occhiata al codice sorgente della tua pagina web.


Sono d'accordo su var_export, ma ho dovuto combinarlo con <pre> </pre> perché non forniva i risultati nel formato corretto.
Chaya Cooper

3
@ Chaya-Cooper Non è formattato correttamente sulla pagina visualizzata, ma penso che Hexodus significasse che è formattato "nel codice sorgente della tua pagina web" -> prova il menu "visualizza sorgente", o Ctrl-U in Firefox
fpierrat

@fpierrat Sì, questo è esattamente quello che volevo dire. Grazie per averlo chiarito.
Hexodus

1
Un vantaggio di questo approccio è che l'output è formattato come PHP valido, quindi puoi copiarlo / incollarlo nuovamente nel tuo codice se lo desideri.
Sean the Bean

13

se qualcuno ha bisogno di visualizzare array così interessanti;) usa questo metodo .. questo verrà stampato sulla tua console del browser

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

puoi usare in questo modo ..

console($myObject);

L'uscita sarà così .. che figata eh !!

inserisci qui la descrizione dell'immagine


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

AGGIORNAMENTO : una soluzione più sofisticata sarebbe:

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

Questo stampa:

    [
        key1 => val1
        key2 => val2
        key3 => [
            subkey1 => subval1
            subkey2 => subval2
            subkey3 => [
                subsubkey1 => subsubval1
                subsubkey2 => subsubval2
            ]
        ]
    ]

<? php foreach ($ data as $ v) echo $ v, PHP_EOL; ?> visualizza "Array"
Xavier

1
Ok, allora dovresti iterare due volte foreach ($ raw as $ array) foreach ($ array as $ v) echo $ v, PHP_EOL;
Yaronius

3

print_r()è principalmente per il debug. Se si desidera stamparlo in quel formato, scorrere l'array e stampare gli elementi.

foreach($data as $d){
  foreach($d as $v){
    echo $v."\n";
  }
}

grazie per la risposta ma stampa i dati come "Array"
Xavier

@Xavier: hai provato il codice aggiornato nella mia risposta? È necessario eseguire il ciclo attraverso entrambi gli array. $dataè un array di array.
Rocket Hazmat

e anche il tuo codice ha funzionato perfettamente, ho appena cambiato / n in un <br />
Xavier

3

Questa potrebbe essere una soluzione più semplice:

echo implode('<br>', $data[0]);

2

Presumo che si usi print_r per il debug. Suggerirei quindi di utilizzare librerie come Kint . Ciò consente di visualizzare array di grandi dimensioni in un formato leggibile:

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

inserisci qui la descrizione dell'immagine


1
Questa non è una soluzione PHP vanigliata, ma fornisce sicuramente un output utile e leggibile!
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];
}
?>

Lo uso per mostrare ai miei visitatori un array piuttosto stampato


1

Un modo molto carino per stampare array formattati in php, usando la funzione var_dump.

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

1

Lo uso per ottenere le chiavi e i loro valori $ qw = mysqli_query ($ connection, $ query);

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


1

Una riga per una rappresentazione JSON facile e veloce:

    echo json_encode($data, JSON_PRETTY_PRINT);

Se usi già composer per il progetto, richiedi symfony / yaml e:

    echo Yaml::dump($data);

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

0

Per i singoli array è possibile utilizzare implode, ha un risultato più pulito da stampare.

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

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

Per gli array multidimensionali è necessario combinarli con una sorta di loop.

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

0

Questo cerca di migliorare print_r()la formattazione dell'output nelle applicazioni della console:

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

Esempio:

[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] => ''
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.