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


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

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

 79
Author: Mark, 2011-03-22

17 answers

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

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

Вместо print_r($data)

 29
Author: Brian Driscoll, 2011-03-22 14:54:17

Вместо

print_r($data);

Попробуйте

print "<pre>";
print_r($data);
print "</pre>";
 374
Author: Phenex, 2011-03-22 15:05:16
print("<pre>".print_r($data,true)."</pre>");
 51
Author: jetpackdata.com, 2012-10-07 19:30:17

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

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

prettyPrint($data);

РЕДАКТИРОВАТЬ: Оптимизированная функция

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

РЕДАКТИРОВАТЬ: Оптимизированная функция Moar с поддержкой пользовательских тегов

function prettyPrint($a, $t='pre') {echo "<$t>".print_r($a,1)."</$t>";}
 42
Author: ditto, 2017-03-14 07:36:46

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

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

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

 11
Author: Hexodus, 2013-03-30 09:37:32

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

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

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

console($myObject);

Вывод будет таким.. так круто, да!!

enter image description here

 6
Author: shakee93, 2017-09-04 13:18:37
foreach($array as $v) echo $v, PHP_EOL;
 3
Author: Yaronius, 2011-03-22 14:53:45

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

echo implode('<br>', $data[0]);
 3
Author: Beta Projects, 2013-08-13 22:17:34

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

foreach($data as $d){
  foreach($d as $v){
    echo $v."\n";
  }
}
 2
Author: Rocket Hazmat, 2011-03-22 14:55:01

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

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

enter image description here

 2
Author: zendka, 2016-08-24 11:01:03

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

 $a = array(1, 2, array("a", "b", "c"));
 var_dump($a);
 1
Author: Muhammad, 2013-03-04 10:27:17

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

while ( $ou = mysqli_fetch_array($qw) )
{
    foreach ($ou as $key => $value) 
    {
            echo $key." - ".$value."";
    }
    echo "<br/>";
}
 1
Author: uutsav, 2014-05-23 10:38:25

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

 1
Author: Elie GAKUBA, 2015-05-22 00:31:33

Однострочный для быстрого и простого представления JSON:

    echo json_encode($data, JSON_PRETTY_PRINT);

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

    echo Yaml::dump($data);
 1
Author: Iain H., 2016-09-15 15:22:19
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}
 0
Author: powtac, 2011-03-22 14:58:11
<?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];
}
?>

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

 0
Author: 3eighty, 2012-11-18 12:05:30

Для отдельных массивов вы можете использовать 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/>';
}
?>
 0
Author: user3550302, 2014-04-18 21:37:50