Hiển thị một mảng ở định dạng có thể đọc / phân cấp


95

Đây là mã để kéo dữ liệu cho mảng của tôi

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

Khi tôi sử dụng print_r ($ data), nó đọc là:

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

Tôi muốn nó được đọc là:

Con đẻ 1
Con
tự nhiên 2 Con tự nhiên 3

Câu trả lời:


31

Thử cái này:

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

thay cho print_r($data)


1
<?php foreach($data[0] as $child) { echo $child . "<br />"; }?> điều này rất hiệu quả cảm ơn Brian!
Xavier

55
tại sao đây là câu trả lời được chọn trong khi <pre> </pre> là lựa chọn hiển nhiên?
cantsay

1
Điều này sẽ không hoạt động nếu bạn có một mảng đa chiều.
Alesana

3
@Alesana Yep, nhưng OP không có mảng đa chiều. Tôi nghĩ như những người khác đã nhận xét về câu trả lời này theo cách bạn muốn đi <pre>print_r($data)</pre>. Luôn luôn vui vẻ khi xem nhận xét mới về câu trả lời trên 5 tuổi! :)
Brian Driscoll

2
À, trong trường hợp của tôi, tôi đang làm việc với một mảng đa chiều. Tôi chưa để lại bình luận trước đây nên khi tôi không thấy ai khác chỉ ra điều này, tôi nghĩ đó có thể là một cơ hội hoàn hảo!
Alesana

423

Thay vì

print_r($data);

thử

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

3
Cũng cần nhắc lại rằng bạn có thể chuyển truelàm tham số thứ hai cho print_r để lấy dữ liệu dưới dạng string. Bây giờ bạn có thể return '<pre>'.print_r(User::all(), true);từ tệp tuyến đường của mình.
DutGRIFF

Tôi cũng thích câu trả lời này nhưng OP chỉ muốn các Chuỗi được in, chứ không phải chỉ số mảng (có vẻ như). Và chỉ có dữ liệu 1 chiều. Tôi thường chỉ làm điều này để kiểm tra tập dữ liệu trước khi tôi tiếp tục với một giải pháp, vì vậy giải pháp này hoạt động tốt hơn cho những thứ như vậy.
iopener


47

Tôi có một chức năng cơ bản:

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

prettyPrint($data);

EDIT: Chức năng được tối ưu hóa

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

CHỈNH SỬA: Chức năng Tối ưu hóa Moar với hỗ trợ thẻ tùy chỉnh

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

7
Câu trả lời tốt nhất cho đến nay, và thậm chí bạn có thể tối ưu hóa nó hơn nếu nó được sử dụng rất thường xuyên với dấu phẩy:echo '<pre>',print_r($a,1),'</pre>';
Darkendorf

15

Tôi nghĩ rằng var_export(), người anh em bị lãng quên của var_dump()có đầu ra tốt nhất - nó nhỏ gọn hơn:

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

Nhân tiện: nó không cần thiết để sử dụng <pre>. var_dump()var_export()đã được định dạng khi bạn xem mã nguồn của trang web của mình.


Tôi đồng ý về var_export, nhưng tôi đã phải kết hợp nó với <pre> </pre> vì nó không xuất ra kết quả ở định dạng thích hợp.
Chaya Cooper

3
@ Chaya-Cooper Nó không được định dạng đúng trên trang được hiển thị, nhưng tôi nghĩ Hexodus có nghĩa là nó được định dạng "trong mã nguồn của trang web của bạn" -> thử menu "xem nguồn" hoặc Ctrl-U trong Firefox
fpierrat

@fpierrat Vâng, đây chính xác là ý của tôi. Cảm ơn vì đã làm rõ điều đó.
Hexodus

1
Một lợi ích của phương pháp này là đầu ra được định dạng là PHP hợp lệ, vì vậy bạn có thể sao chép / dán nó trở lại mã của mình nếu bạn muốn.
Sean the Bean

13

nếu ai đó cần xem các mảng thật tuyệt;) hãy sử dụng phương pháp này .. điều này sẽ in ra bảng điều khiển trình duyệt của bạn

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

bạn có thể sử dụng như thế này ..

console($myObject);

Đầu ra sẽ như thế này .. mát quá nhỉ !!

nhập mô tả hình ảnh ở đây


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

CẬP NHẬT : Một giải pháp phức tạp hơn sẽ là:

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

Điều này in ra:

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

<? php foreach ($ data as $ v) echo $ v, PHP_EOL; ?> hiển thị "Array"
Xavier

1
Được rồi, bạn nên lặp lại hai lần foreach ($ raw as $ array) foreach ($ array dưới dạng $ v) echo $ v, PHP_EOL;
Yaronius

3

print_r()chủ yếu là để gỡ lỗi. Nếu bạn muốn in nó ở định dạng đó, hãy lặp qua mảng và in các phần tử ra.

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

cảm ơn vì phản hồi nhưng nó in ra dữ liệu dưới dạng "Array"
Xavier

@Xavier: Bạn đã thử mã cập nhật trong câu trả lời của tôi chưa? Bạn cần lặp qua cả hai mảng. $datalà một mảng của mảng.
Rocket Hazmat

và mã của bạn làm việc hoàn hảo quá tôi chỉ cần thay đổi / n để một <br />
Xavier

3

Đây có thể là một giải pháp đơn giản hơn:

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

2

Tôi giả sử một trong những sử dụng print_r để gỡ lỗi. Sau đó tôi sẽ đề xuất sử dụng các thư viện như Kint . Điều này cho phép hiển thị các mảng lớn ở định dạng có thể đọc được:

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

nhập mô tả hình ảnh ở đây


1
Đây không phải là một giải pháp PHP vani, nhưng chắc chắn cung cấp đầu ra hữu ích và dễ đọc!
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];
}
?>

Tôi sử dụng điều này để hiển thị một mảng in đẹp cho khách truy cập của tôi


1

Cách rất hay để in mảng được định dạng trong php, sử dụng hàm var_dump.

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

1

Tôi sử dụng cái này để lấy các khóa và giá trị của chúng $ qw = mysqli_query ($ connection, $ query);

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


1

Một lớp lót để biểu diễn JSON nhanh chóng và dễ dàng:

    echo json_encode($data, JSON_PRETTY_PRINT);

Nếu đã sử dụng composer cho dự án, hãy yêu cầu symfony / yaml và:

    echo Yaml::dump($data);

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

0

Đối với các mảng đơn, bạn có thể sử dụng mã hóa, nó có kết quả rõ ràng hơn để in.

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

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

Đối với mảng nhiều chiều, bạn cần kết hợp với một số loại vòng lặp.

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

0

Điều này cố gắng cải thiện print_r()định dạng đầu ra trong các ứng dụng bảng điều khiển:

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

Thí dụ:

[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] => ''
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.