Afficher un tableau dans un format lisible / hiérarchique


96

Voici le code pour extraire les données de mon tableau

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

Lorsque j'utilise print_r ($ data), il se lit comme suit:

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

Je voudrais qu'il se lise comme suit:

Enfant naturel 1
Enfant
naturel 2 Enfant naturel 3

Réponses:


31

Essaye ça:

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

au lieu de print_r($data)


1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> cela a très bien fonctionné grâce à Brian!
Xavier

55
pourquoi diable est-ce la réponse choisie alors que <pre> </pre> est le choix évident?
cantsay le

1
Cela ne fonctionnera pas si vous avez un tableau multidimensionnel.
Alesana

3
@Alesana Oui, mais OP n'avait pas de tableau multidimensionnel. Je pense que, comme d'autres l'ont commenté sur cette réponse, la façon dont vous voulez procéder est <pre>print_r($data)</pre>. Toujours amusant de voir un nouveau commentaire sur une réponse de 5 ans et plus! :)
Brian Driscoll

2
Ah, dans mon cas, je travaillais avec un tableau multidimensionnel. Je n'ai pas laissé de commentaire auparavant, alors quand j'ai vu que personne d'autre ne l'avait signalé, j'ai pensé que c'était une opportunité parfaite!
Alesana

423

Au lieu de

print_r($data);

essayer

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

3
Il convient également de mentionner que vous pouvez passer truecomme deuxième paramètre à print_r pour obtenir les données sous la forme string. Maintenant, vous pouvez à return '<pre>'.print_r(User::all(), true);partir de votre fichier de routes.
DutGRIFF

J'aime aussi cette réponse, mais l'OP ne voulait que les chaînes à imprimer, et non les indices du tableau (il semble que). Et seulement des données unidimensionnelles. Je ne fais généralement cela que pour vérifier un jeu d'enregistrements de données avant de continuer avec une solution, donc cette solution fonctionne bien mieux pour des choses comme ça.
iopener


47

J'ai une fonction de base:

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

prettyPrint($data);

EDIT: fonction optimisée

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

EDIT: fonction optimisée Moar avec prise en charge des balises personnalisées

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

7
Meilleure réponse à ce jour, et vous pouvez même l'optimiser davantage si elle est utilisée très souvent avec une virgule:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf

15

Je pense que var_export()le frère oublié de var_dump()a le meilleur rendement - il est plus compact:

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

Au fait: il n'est pas toujours nécessaire de l'utiliser <pre>. var_dump()et var_export()sont déjà formatés lorsque vous regardez dans le code source de votre page Web.


Je suis d'accord sur var_export, mais j'ai dû le combiner avec <pre> </pre> car il ne produisait pas les résultats dans le bon format.
Chaya Cooper

3
@ Chaya-Cooper Il n'est pas correctement formaté sur la page affichée, mais je pense qu'Hexodus signifie qu'il est formaté "dans le code source de votre page Web" -> essayez le menu "afficher la source", ou Ctrl-U dans Firefox
fpierrat

@fpierrat Oui, c'est exactement ce que je voulais dire. Merci d'avoir clarifié cela.
Hexodus

1
L'un des avantages de cette approche est que la sortie est formatée en PHP valide, vous pouvez donc la copier / coller directement dans votre code si vous le souhaitez.
Sean the Bean

13

si quelqu'un a besoin de voir des tableaux si cool;) utilisez cette méthode .. cela imprimera sur la console de votre navigateur

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

vous pouvez utiliser comme ça ..

console($myObject);

La sortie sera comme ça .. tellement cool hein !!

entrez la description de l'image ici


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

MISE À JOUR : Une solution plus sophistiquée serait:

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

Cela imprime:

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

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

1
Ok, alors vous devriez itérer deux fois foreach ($ raw comme $ array) foreach ($ array as $ v) echo $ v, PHP_EOL;
Yaronius

3

print_r()est principalement pour le débogage. Si vous souhaitez l'imprimer dans ce format, parcourez le tableau et imprimez les éléments.

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

merci pour la réponse mais il imprime les données comme "Array"
Xavier

@Xavier: Avez-vous essayé le code mis à jour dans ma réponse? Vous devez parcourir les deux tableaux. $dataest un tableau de tableaux.
Rocket Hazmat

et votre code fonctionnait parfaitement aussi, je viens de changer le / n en <br />
Xavier


2

Je suppose que l'on utilise print_r pour le débogage. Je suggérerais alors d'utiliser des bibliothèques comme Kint . Cela permet d'afficher de gros tableaux dans un format lisible:

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

entrez la description de l'image ici


1
Ce n'est pas une solution PHP vanille, mais fournit certainement une sortie utile et lisible!
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];
}
?>

J'utilise ceci pour montrer un joli tableau imprimé à mes visiteurs


1

Très belle façon d'imprimer un tableau formaté en php, en utilisant la fonction var_dump.

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

1

J'utilise ceci pour obtenir les clés et leurs valeurs $ qw = mysqli_query ($ connection, $ query);

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


1

Une seule ligne pour une représentation JSON simple et rapide:

    echo json_encode($data, JSON_PRETTY_PRINT);

Si vous utilisez déjà composer pour le projet, exigez symfony / yaml et:

    echo Yaml::dump($data);

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

0

Pour les tableaux simples, vous pouvez utiliser implode, il a un résultat plus propre à imprimer.

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

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

Pour les tableaux multidimensionnels, vous devez les combiner avec une sorte de boucle.

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

0

Cela tente d'améliorer le print_r()formatage de sortie dans les applications de 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;
  }
}

Exemple:

[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] => ''
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.