Okunabilir / hiyerarşik formatta bir dizi görüntüleme


96

İşte dizim için verileri çekmenin kodu

<?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) kullandığımda şu şekilde okunur:

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

Şu şekilde okunmasını istiyorum:

Doğal Çocuk 1
Doğal Çocuk 2
Doğal Çocuk 3

Yanıtlar:


31

Bunu dene:

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

yerine print_r($data)


1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> Bu harika çalıştı, teşekkürler Brian!
Xavier

58
<pre> </pre> bariz bir seçim iken neden bu seçilmiş cevaptır?
cantsay

1
Çok boyutlu bir diziniz varsa bu çalışmayacaktır.
2016

3
@Alesana Evet, ancak OP'nin çok boyutlu bir dizisi yoktu. Başkalarının bu cevaba yorum yaptığı gibi, gitmek istediğiniz yolun bu olduğunu düşünüyorum <pre>print_r($data)</pre>. Yine de 5 yıldan eski bir cevapla ilgili yeni bir yorum görmek her zaman eğlencelidir! :)
Brian Driscoll

2
Ah, benim durumumda çok boyutlu bir dizi ile çalışıyordum. Daha önce bir yorum bırakmadım, bu yüzden kimsenin buna işaret etmediğini görünce bunun mükemmel bir fırsat olabileceğini düşündüm!
2016

430

Onun yerine

print_r($data);

Deneyin

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

3
trueVerileri olarak almak için print_r'ye ikinci parametre olarak geçebileceğinizi de belirtmekte fayda var string. Artık return '<pre>'.print_r(User::all(), true);rotalar dosyanızdan yapabilirsiniz.
DutGRIFF

Bu yanıtı da beğendim ama OP sadece Dizelerin yazdırılmasını istedi, dizi indekslerini değil (öyle görünüyor). Ve sadece 1 boyutlu veriler. Bunu genellikle bir çözüme devam etmeden önce bir veri kayıt kümesini kontrol etmek için yapıyorum, bu nedenle bu çözüm böyle şeyler için çok daha iyi çalışıyor.
iopener


47

Temel bir işlevim var:

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

prettyPrint($data);

DÜZENLEME: Optimize edilmiş işlev

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

DÜZENLEME: Özel etiket desteği ile Moar Optimized işlevi

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

7
Şimdiye kadarki en iyi cevap ve virgülle çok sık kullanılıyorsa onu daha da optimize edebilirsiniz:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf

15

Bence var_export(), unutulmuş kardeşi var_dump()en iyi çıktıya sahip - daha kompakt:

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

Bu arada, kullanmak her zaman gerekli değil <pre>. var_dump()ve var_export()web sayfanızın kaynak koduna baktığınızda zaten biçimlendirilmiştir.


Var_export konusunda aynı fikirdeyim, ancak sonuçları uygun biçimde çıktılamadığı için <pre> </pre> ile birleştirmek zorunda kaldım.
Chaya Cooper

3
@ Chaya-Cooper Görüntülenen sayfada düzgün biçimlendirilmemiş, ancak Hexodus'un " web sayfanızın kaynak kodunda " biçimlendirildiği anlamına geldiğini düşünüyorum -> "kaynağı görüntüle" menüsünü veya Firefox'ta Ctrl-U'yu deneyin
fpierrat

@fpierrat Evet, tam olarak bunu kastettim. Bunu açıkladığınız için teşekkürler.
Hexodus

1
Bu yaklaşımın bir yararı, çıktının geçerli PHP olarak biçimlendirilmiş olmasıdır, böylece isterseniz kopyalayıp / yapıştırabilirsiniz.
Sean the Bean

14

Birinin dizileri çok güzel görüntülemesi gerekiyorsa;) bu yöntemi kullanın .. bu, tarayıcı konsolunuza yazdıracaktır

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

bunun gibi kullanabilirsiniz ..

console($myObject);

Çıktı şöyle olacak .. çok havalı ha !!

görüntü açıklamasını buraya girin


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

GÜNCELLEME : Daha karmaşık bir çözüm şöyle olacaktır:

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

Bu çıktı:

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

<? php foreach ($ v olarak $ veri) echo $ v, PHP_EOL; ?> "Dizi" görüntüler
Xavier

1
Tamam, o zaman foreach ($ dizi olarak $ raw) foreach ($ dizi $ v olarak) echo $ v, PHP_EOL;
Yaronius

3

print_r()çoğunlukla hata ayıklama içindir. Bu formatta yazdırmak istiyorsanız, dizi boyunca döngü yapın ve öğeleri yazdırın.

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

yanıt için teşekkürler, ancak verileri "Dizi" olarak yazdırıyor
Xavier

@Xavier: Cevabımda güncellenmiş kodu denediniz mi? Her iki dizide de döngü yapmanız gerekir. $databir dizi dizisidir.
Rocket Hazmat

ve kodunuz da mükemmel çalıştı. / n'yi bir <br />
Xavier


2

Birinin hata ayıklama için print_r kullandığını varsayıyorum. O zaman Kint gibi kitaplıkları kullanmanızı öneririm . Bu, büyük dizilerin okunabilir bir biçimde görüntülenmesini sağlar:

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

görüntü açıklamasını buraya girin


1
Bu bir vanilya PHP çözümü değildir, ancak kesinlikle kullanışlı ve okunabilir çıktı sağlar!
Sean 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];
}
?>

Bunu ziyaretçilerime oldukça basılı bir dizi göstermek için kullanıyorum


1

Var_dump işlevini kullanarak php'de biçimlendirilmiş diziyi yazdırmanın çok güzel bir yolu.

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

1

Bunu anahtarları ve değerlerini almak için kullanıyorum $ qw = mysqli_query ($ bağlantı, $ sorgu);

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


1

Hızlı ve kolay JSON gösterimi için tek satırlık:

    echo json_encode($data, JSON_PRETTY_PRINT);

Proje için zaten besteci kullanıyorsanız, symfony / yaml ve:

    echo Yaml::dump($data);

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

0

Tek diziler için implode kullanabilirsiniz, yazdırmak için daha temiz bir sonuca sahiptir.

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

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

Çok boyutlu diziler için bir tür döngü ile birleştirmeniz gerekir.

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

0

Bu print_r(), konsol uygulamalarında çıktı biçimlendirmesini iyileştirmeye çalışır :

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

Misal:

[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] => ''
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.