Menampilkan larik dalam format yang dapat dibaca / hierarki

96

Berikut adalah kode untuk menarik data untuk array saya

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

Ketika saya menggunakan print_r ($ data) itu dibaca sebagai:

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

Saya ingin membacanya sebagai:

Anak Alami 1
Anak
Alami 2 Anak Alami 3

Xavier
sumber

Jawaban:

31

Coba ini:

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

di tempat print_r($data)

Brian Driscoll
sumber
1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> ini berhasil, terima kasih Brian!
Xavier
55
mengapa ini adalah jawaban yang dipilih padahal <pre> </pre> adalah pilihan yang jelas?
cantsay
1
Ini tidak akan berfungsi jika Anda memiliki array multidimensi.
Alesana
3
@Alesana Ya, tetapi OP tidak memiliki array multidimensi. Saya pikir ketika orang lain mengomentari jawaban ini sesuai keinginan Anda <pre>print_r($data)</pre>. Selalu menyenangkan melihat komentar baru pada jawaban berusia 5+ tahun! :)
Brian Driscoll
2
Ah, dalam kasus saya, saya bekerja dengan array multidimensi. Saya belum memberikan komentar sebelumnya, jadi ketika saya melihat tidak ada orang lain yang menunjukkan hal ini, saya pikir ini mungkin kesempatan yang sempurna!
Alesana
423

Dari pada

print_r($data);

mencoba

print "<pre>";
print_r($data);
print "</pre>";
Phenex
sumber
3
Perlu juga disebutkan bahwa Anda dapat meneruskan truesebagai parameter kedua ke print_r untuk mendapatkan data sebagai string. Sekarang Anda dapat return '<pre>'.print_r(User::all(), true);dari file rute Anda.
DutGRIFF
Saya suka jawaban ini juga, tapi OP hanya ingin mencetak Strings, dan bukan indeks array (sepertinya). Dan hanya data 1 dimensi. Saya biasanya hanya melakukan ini untuk memeriksa kumpulan data sebelum saya melanjutkan dengan solusi, jadi solusi ini bekerja jauh lebih baik untuk hal-hal seperti itu.
iopener
66
print("<pre>".print_r($data,true)."</pre>");
Shankar ARUL - jupyterdata.com
sumber
1
Ini sangat ideal karena tidak menambahkan spasi yang tidak perlu di sekitar data Anda.
nullability
47

Saya memiliki fungsi dasar:

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

prettyPrint($data);

EDIT: Fungsi yang dioptimalkan

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

EDIT: Fungsi Moar Dioptimalkan dengan dukungan tag kustom

function prettyPrint($a, $t='pre') {echo "<$t>".print_r($a,1)."</$t>";}
dito
sumber
7
Jawaban terbaik sejauh ini, dan Anda bahkan dapat lebih mengoptimalkannya jika sering digunakan dengan koma:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf
15

Saya pikir var_export(), saudara laki-laki yang terlupakan var_dump()memiliki hasil terbaik - ini lebih kompak:

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

Ngomong-ngomong: tidak selalu perlu digunakan <pre>. var_dump()dan var_export()sudah diformat saat Anda melihat di kode sumber laman web Anda.

Hexodus
sumber
Saya setuju tentang var_export, tetapi saya harus menggabungkannya dengan <pre> </pre> karena tidak mengeluarkan hasil dalam format yang benar.
Chaya Cooper
3
@ Chaya-Cooper Ini tidak diformat dengan benar pada halaman yang ditampilkan, tapi menurut saya Hexodus berarti itu diformat "dalam kode sumber halaman web Anda" -> coba menu "lihat sumber", atau Ctrl-U di Firefox
fpierrat
@fpierrat Ya, inilah yang saya maksud. Terima kasih telah menjelaskannya.
Hexodus
1
Salah satu keuntungan dari pendekatan ini adalah bahwa hasilnya diformat sebagai PHP yang valid, sehingga Anda dapat menyalin / menempelkannya langsung kembali ke kode Anda jika Anda mau.
Sean the Bean
13

jika seseorang perlu melihat array, sangat keren;) gunakan metode ini .. ini akan mencetak ke konsol browser Anda

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

Anda bisa menggunakan seperti ini ..

console($myObject);

Outputnya akan seperti ini .. keren sekali ya !!

masukkan deskripsi gambar di sini

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

UPDATE : Solusi yang lebih canggih adalah:

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

Ini mencetak:

    [
        key1 => val1
        key2 => val2
        key3 => [
            subkey1 => subval1
            subkey2 => subval2
            subkey3 => [
                subsubkey1 => subsubval1
                subsubkey2 => subsubval2
            ]
        ]
    ]
Yaronius
sumber
<? php foreach ($ data sebagai $ v) echo $ v, PHP_EOL; ?> menampilkan "Array"
Xavier
1
Oke, maka Anda harus mengulang dua kali foreach ($ raw as $ array) foreach ($ array as $ v) echo $ v, PHP_EOL;
Yaronius
3

print_r()sebagian besar untuk debugging. Jika Anda ingin mencetaknya dalam format itu, putar melalui array, dan cetak elemennya.

foreach($data as $d){
  foreach($d as $v){
    echo $v."\n";
  }
}
Roket Hazmat
sumber
terima kasih atas tanggapannya tetapi menampilkan data sebagai "Array"
Xavier
@ Xavier: Apakah Anda mencoba kode yang diperbarui dalam jawaban saya? Anda perlu mengulang melalui kedua larik. $dataadalah larik array.
Roket Hazmat
dan kode Anda bekerja dengan sempurna juga. Saya baru saja mengubah / n menjadi <br />
Xavier
3

Ini mungkin solusi yang lebih sederhana:

echo implode('<br>', $data[0]);
Proyek Beta
sumber
2

Saya berasumsi seseorang menggunakan print_r untuk debugging. Saya kemudian akan menyarankan menggunakan perpustakaan seperti Kint . Ini memungkinkan menampilkan array besar dalam format yang dapat dibaca:

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

masukkan deskripsi gambar di sini

zendka
sumber
1
Ini bukan solusi PHP vanilla, tetapi pasti memberikan output yang berguna dan dapat dibaca!
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];
}
?>

Saya menggunakan ini untuk menunjukkan array yang cukup dicetak kepada pengunjung saya

3eighty
sumber
1

Cara yang sangat bagus untuk mencetak array yang diformat dalam php, menggunakan fungsi var_dump.

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

Saya menggunakan ini untuk mendapatkan kunci dan nilainya $ qw = mysqli_query ($ connection, $ query);

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

Saya hanya akan menggunakan alat online.

Elie GAKUBA
sumber
Saya baru saja memperbarui ini agar jauh lebih kuat, terima kasih untuk tautannya.
phillihp
1

Satu baris untuk representasi JSON yang cepat dan mudah:

    echo json_encode($data, JSON_PRETTY_PRINT);

Jika sudah menggunakan komposer untuk proyek ini, membutuhkan symfony / yaml dan:

    echo Yaml::dump($data);
Iain H.
sumber
0
echo '<pre>';
foreach($data as $entry){
    foreach($entry as $entry2){
        echo $entry2.'<br />';
    }
}
powtac.dll
sumber
0

Untuk array tunggal Anda dapat menggunakan implode, hasilnya akan lebih bersih untuk dicetak.

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

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

Untuk array multidimensi, Anda perlu menggabungkannya dengan semacam loop.

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

Ini mencoba untuk meningkatkan print_r()format keluaran dalam aplikasi konsol:

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

Contoh:

[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] => ''
Pere
sumber