Отображение массива в удобочитаемом / иерархическом формате


вот код для извлечения данных для моего массива

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

когда я использую print_r ($data) он читает как:

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

Я хотел бы, чтобы он читался как:

Естественный Ребенок 1
Естественный Ребенок 2
Естественный Ребенок 3

17 79

17 ответов:

попробуйте это:

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

на месте print_r($data)

вместо

print_r($data);

попробовать

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

у меня есть основная функция:

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

prettyPrint($data);

EDIT: оптимизированная функция

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

EDIT: Moar оптимизированная функция с пользовательской поддержкой тегов

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

думаю, что var_export() забытый брат var_dump() лучший выход - это более компактный:

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

кстати: это не всегда необходимо использовать <pre>. var_dump() и var_export() уже отформатированы, когда вы смотрите в исходном коде вашей веб-страницы.

Если кому-то нужно просматривать массивы так круто ;) используйте этот метод.. это будет печатать на консоли браузера

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

вы можете использовать такой..

console($myObject);

вывод будет такой.. так здорово, а !!

enter image description here

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

Это может быть простое решение:

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

print_r() в основном для отладки. Если вы хотите распечатать его в этом формате, выполните цикл по массиву и распечатайте элементы.

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

Я предполагаю, что для отладки используется print_r. Затем я бы предложил использовать библиотеки, такие как Кинт. Это позволяет отображать большие массивы в удобочитаемом формате:

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

enter image description here

очень хороший способ печати форматированного массива в php, используя функцию var_dump.

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

Я использую это для получения ключей и их значений $qw = mysqli_query($connection, $query);

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

Я бы просто использовать онлайн-инструменты.

один-вкладыш для быстрой и легкой представление JSON:

    echo json_encode($data, JSON_PRETTY_PRINT);

Если вы уже используете composer для проекта, требуйте symfony / yaml и:

    echo Yaml::dump($data);
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}
<?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];
}
?>

Я использую это, чтобы показать, довольно напечатать массив для моих посетителей

для одиночных массивов вы можете использовать implode, он имеет более чистый результат для печати.

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

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

для многомерных массивов вам нужно объединить с каким-то циклом.

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