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

Xavier
la source

Réponses:

31

Essaye ça:

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

au lieu de print_r($data)

Brian Driscoll
la source
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>";
Phenex
la source
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
66
print("<pre>".print_r($data,true)."</pre>");
Shankar ARUL - jupyterdata.com
la source
1
Ceci est idéal car cela n'ajoute pas d'espace blanc inutile autour de vos données.
nullité
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>";}
idem
la source
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.

Hexode
la source
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

shakee93
la source
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
            ]
        ]
    ]
Yaronius
la source
<? 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";
  }
}
Fusée Hazmat
la source
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
3

Cela peut être une solution plus simple:

echo implode('<br>', $data[0]);
Projets bêta
la source
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

Zendka
la source
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

3eighty
la source
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);
Muhammad
la source
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/>";
}
uutsav
la source
1

J'utiliserais simplement des outils en ligne.

Elie GAKUBA
la source
Je viens de mettre à jour cela pour être beaucoup plus robuste, merci pour le lien.
phillihp
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);
Iain H.
la source
0
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}
Powtac
la source
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/>';
}
?>
mjaning
la source
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] => ''
Père
la source