Một thay thế Var_dump đẹp / nhiều thông tin hơn trong PHP? [đóng cửa]


130

Mỗi lập trình viên PHP giỏi đều có print_rhoặc var_dumptrình bao bọc họ sử dụng, yêu thích và gán các phím tắt cho, tại sao chúng ta không chia sẻ những cái yêu thích của mình .


39
tôi chỉ sử dụng echo '<pre>'; print_r ($ var); exit; tôi thậm chí không đóng nó. tôi đoán tôi không đàng hoàng
Funky Dude

Tôi đã chỉnh sửa liên kết để trỏ đến github, nơi tôi tiếp tục phát triển Kint và nếu bạn vẫn có bất kỳ vấn đề nào với nó, vui lòng cho tôi biết thông qua bất kỳ phương tiện nào.
raveren

1
Này, Kint thật tuyệt! Nó chỉ cứu ngày của tôi.
István Ujj-Mészáros

2
Tại sao một câu hỏi mà 100% là một thông báo quảng cáo của một chương trình đang ở trong một phiên bản "tôi tự tạo var_dump ()" ?? Câu hỏi đầu tiên sẽ là tại sao quảng cáo sản phẩm được cho phép như câu hỏi.
m3nda

11
Bởi vì tôi đã tạo ra công cụ hơn một năm sau khi đặt câu hỏi. Tôi không biết điều gì làm phiền bạn, tôi đã tạo ra một công cụ nguồn mở trưởng thành 10k + và không ngừng cải thiện nó nhiều năm sau đó. Tôi đã cung cấp câu trả lời của riêng mình trong câu hỏi - như truyền thống trong SO.
raveren

Câu trả lời:


70

Một năm đầy đủ thời gian và lao động sau khi hỏi điều này, cuối cùng tôi đã mở ra phiên bản var_dump của mình, Kint. Đọc về nó trong trang dự án , hoặc trực tiếp trong github .

Đây là một ảnh chụp màn hình:

kint

Xin lỗi cho phích cắm :)


EDIT: Tôi chỉ muốn nhắc nhở những người bình luận rằng đây không phải là một diễn đàn hỗ trợ, nếu bạn gặp vấn đề / muốn có một tính năng, vui lòng gửi một vấn đề . Hỗ trợ yêu cầu bình luận sẽ được gắn cờ để xóa.


tôi đã phải thay đổi kích thước phông chữ và làm đẹp mã CSS, nhưng công việc tuyệt vời, tôi thích nó ... đến từ một người dùng Krumo lâu năm
Quamis

1
bạn đã thực hiện những thay đổi nào, nếu bạn tin rằng đó là một sự cải tiến, bạn có thể gửi cho tôi các thay đổi tới raveren @ gmail
raveren

tôi đã quen với Krumo và tôi muốn các phông chữ nhỏ hơn và tôi cũng đã làm đẹp mã CSS. Không có gì có thể được gọi là một cải tiến thực tế, giống như một thói quen cũ :)
Quamis

Vâng, ý tưởng là css được cho là được nén cùng với js để can thiệp ít nhất có thể với đầu ra thực tế. Tất nhiên, việc thụt lề khá lớn của nguồn được tạo cũng đã được lên kế hoạch, nhưng hiện tại tôi không có thời gian để dành cho Kint ..
raveren

2
Cũng giống như một ví dụ, Kint hiển thị các biến được bảo vệ và riêng tư nếu bạn kết xuất một đối tượng, krumo thì không (vì chỉ có trước đây sử dụng các lớp phản chiếu mà tôi giả sử). Nói chung tôi thấy Kint là cấp trên; mặc dù tôi cũng phải điều chỉnh css để làm cho nó có thể sử dụng được nhiều hơn (phông chữ khổng lồ đó không hoạt động tốt khi bỏ hàng tấn các giá trị lồng nhau). Ồ và mật mã đằng sau nó không phải là một mớ hỗn độn, điều không thể nói về Krumo (xin lỗi tác giả Krumo!)
Mahn

45

Tôi thích nhất là var_dumpchức năng, như được cung cấp bởi tiện ích mở rộng Xdebug : chỉ cần cài đặt tiện ích mở rộng (dễ dàng, cả trên windows và Linux)var_dumpnhận được đầu ra tốt hơn:

  • hình thành tốt hơn
    • HTML
    • màu sắc
  • và bạn có các tùy chọn để điều chỉnh lượng thông tin sẽ được hiển thị

Và một ảnh chụp màn hình nhanh:

xdebug


Và, tất nhiên, Xdebug mang đến vô số thứ hữu ích khác, như gỡ lỗi từ xa (ví dụ như gỡ lỗi đồ họa cho ứng dụng PHP của bạn, ví dụ trong PDT của Eclipse) , định hình, ...


1
Tôi cần sử dụng lớp định dạng xdebug này trong một máy chủ chia sẻ. Có cách nào để đưa nó vào dự án cá nhân của tôi không?
Anyul Rivas

1
Nếu bạn không phải là quản trị viên (root) của máy chủ, rất có thể bạn sẽ không thể cài đặt tiện ích mở rộng PHP (Tôi chưa bao giờ thấy dịch vụ lưu trữ chia sẻ sẽ cài đặt một tiện ích mở rộng để cài đặt tiện ích mở rộng PHP) ; vì vậy, không, bạn sẽ không thể sử dụng Xdebug (dù sao, cài đặt nó trên máy chủ sản xuất thường không phải là một ý tưởng hay: đó là một phần mở rộng gỡ lỗi, sau đó) ; bạn sẽ phải quay lại triển khai thực hiện chức năng biến đổi dựa trên PHP (xem một số câu trả lời khác)
Pascal MARTIN

1
vâng, tôi chỉ cần lớp gửi cho mình một số đầu ra khi xảy ra lỗi.
Anyul Rivas

34

Tôi đã viết riêng của mình: REF ( bản demo ):

đầu ra r ()

Các kế hoạch là để thêm kết xuất chỉ văn bản và hiển thị thông tin về biểu thức nhập như Kint không ...


4
Công việc tốt, công cụ rất tốt
ssuperczynski

2
REF là tuyệt vời, đầy màu sắc, nhanh chóng. Tôi sử dụng nó mọi lúc.
Marty McGee

2
Công cụ tuyệt vời, tôi chỉ cần chuyển sang nó. Cảm ơn!
Andris

Một vài người sử dụng nhà soạn nhạc, à ... không phải tôi. Nếu bạn tạo một dlltôi sẽ sử dụng "gỡ lỗi" này. Cảm ơn, và làm việc tốt!
Alex

27

Đây là của tôi, mà tôi sử dụng nội tuyến, rất hữu ích:

$pretty = function($v='',$c="&nbsp;&nbsp;&nbsp;&nbsp;",$in=-1,$k=null)use(&$pretty){$r='';if(in_array(gettype($v),array('object','array'))){$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").'<br>';foreach($v as $sk=>$vl){$r.=$pretty($vl,$c,$in+1,$sk).'<br>';}}else{$r.=($in!=-1?str_repeat($c,$in):'').(is_null($k)?'':"$k: ").(is_null($v)?'&lt;NULL&gt;':"<strong>$v</strong>");}return$r;};

echo $pretty($some_variable);

2
Yêu chức năng này - dễ dàng và rõ ràng và tôi đã đề cập rất dễ dàng :)
derekdreery 21/03

Cảm ơn. Tôi sử dụng nó mọi lúc. Nên được xây dựng vào PHP thực sự. Bạn có thể đặt định dạng của riêng bạn, sử dụng tham số thứ hai. ví dụ: echo $ khá ($ some_variable, "-");
Guillermo Phillips

7
Điều này đẹp mắt kết hợp tất cả các tính năng tồi tệ nhất từ print_r, var_dump và var_export. Không thoát html, chỉ chấp nhận tham số duy nhất, treo trên đệ quy, không thể trả lại đầu ra và chỉ cần tắt nó, nó hoàn toàn không thể đọc được . Tôi không muốn là một lỗ đít, nhưng các ý kiến ​​chỉ làm cho nó có vẻ rất hoàn hảo.
raveren

Cảm ơn bạn đã bình luận của bạn @Raveren. Nếu bạn có thể cụ thể hơn, thì tôi sẽ cải thiện câu trả lời của tôi.
Guillermo Phillips

2
IMO giải pháp dòng đơn tốt nhất là đơn giản function pretty(){echo'<pre>';foreach(func_get_args()as $arg){ob_start();var_dump($arg);echo htmlentities(ob_get_clean())."\n#####\n#####\n\n";}die;}. Var_dump là một hàm rất dài, nó xử lý tất cả các trường hợp cạnh của PHP (trong đó có LOTS) và ổn định 100%, mặc dù không thể đọc được. Nhưng vào cuối ngày, nếu bạn thấy việc triển khai của mình là tốt nhất cho bạn, đó là điều bạn chắc chắn nên sử dụng.
raveren

16

Bạn đang tìm kiếm Krumo ( Cảnh báo, cảnh báo Chrome cho Phần mềm độc hại ).

Nói một cách đơn giản, Krumo là sự thay thế cho print_r () và var_dump (). Theo định nghĩa, Krumo là một công cụ gỡ lỗi (ban đầu chỉ dành cho PHP4 / PHP5, giờ chỉ dành cho PHP5), hiển thị thông tin có cấu trúc về bất kỳ biến PHP nào.


Thật là tuyệt vời! Cảm ơn. 1
the_drow

2
Khi tôi thử nó, nó đã bị hỏng. Tôi đã báo cáo nhưng không có hồi âm và không có phiên bản mới
Mawg nói rằng phục hồi Monica

2
@Pekka Liên kết đang đưa ra cảnh báo về phần mềm độc hại trong Chrome.
Tim Post

Hôm nay krumo đã được cập nhật bởi anh chàng này github.com/mmucklo/krumo (nhưng Kint có thể tốt hơn, chi tiết hơn)
lolesque

9

Tôi yêu FirePHP cộng firebug

  • Nó ghi thông tin đăng nhập bằng cách sử dụng các tiêu đề, vì vậy nó không phá vỡ AJAX.
  • Cung cấp cho bạn một biểu diễn đồ họa rất đẹp của các biến / đối tượng bạn đăng nhập
  • Có thể hiển thị tên tệp và số dòng nơi mỗi câu lệnh log xảy ra
  • Dễ sử dụng trong dự án của bạn, với API hướng thủ tục hoặc hướng đối tượng


8

Giải pháp (một phần) của tôi cho việc này chỉ đơn giản là thêm một chức năng như thế này (sử dụng Google Chrome):

<?
function console_dump($value)
{ 
?>
<script>
    console.log(<? echo json_encode($value); ?>);
</script>
<?
}
?>

Nhấn Ctrl + Shift + J (mở giao diện điều khiển) và bạn có thể tìm thấy ở đó cấu trúc JSON. Thậm chí hữu ích hơn cho một bản in đẹp của các câu trả lời JSON.


8

Một ví dụ hoàn chỉnh về những gì tôi sử dụng ...

<pre>

<?php


//*********** Set up some sample data

$obj = new stdClass;
$obj->a=123;
$obj->pl=44;
$obj->l=array(31,32);

$options = array(
  'Orchestra'=>array(1=>'Strings', 8=>'Brass', 9=>$obj, 3=>'Woodwind', 16=>'Percussion'),
  2=>'Car',
  4=>'Bus',
  'TV'=>array(21=>'Only Fools', 215=>'Brass Eye', 23=>'Vic Bob',44=>null, 89=>false));


//*********** Define the function

function dump($data, $indent=0) {
  $retval = '';
  $prefix=\str_repeat(' |  ', $indent);
  if (\is_numeric($data)) $retval.= "Number: $data";
  elseif (\is_string($data)) $retval.= "String: '$data'";
  elseif (\is_null($data)) $retval.= "NULL";
  elseif ($data===true) $retval.= "TRUE";
  elseif ($data===false) $retval.= "FALSE";
  elseif (is_array($data)) {
    $retval.= "Array (".count($data).')';
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix [$key] = ";
      $retval.= dump($value, $indent);
    }
  }
  elseif (is_object($data)) {
    $retval.= "Object (".get_class($data).")";
    $indent++;
    foreach($data AS $key => $value) {
      $retval.= "\n$prefix $key -> ";
      $retval.= dump($value, $indent);
    }
  }
  return $retval;
}


//*********** Dump the data

echo dump($options);

?>
</pre>

Đầu ra ...

Array (4)
 [Orchestra] = Array (5)
 |   [1] = String: 'Strings'
 |   [8] = String: 'Brass'
 |   [9] = Object (stdClass)
 |   |   a -> Number: 123
 |   |   pl -> Number: 44
 |   |   l -> Array (2)
 |   |   |   [0] = Number: 31
 |   |   |   [1] = Number: 32
 |   [3] = String: 'Woodwind'
 |   [16] = String: 'Percussion'
 [2] = String: 'Car'
 [4] = String: 'Bus'
 [TV] = Array (5)
 |   [21] = String: 'Only Fools'
 |   [215] = String: 'Brass Eye'
 |   [23] = String: 'Vic Bob'
 |   [44] = NULL
 |   [89] = FALSE

1
Tôi đã thay đổi \ n thành PHP_EOL và điều này hoạt động tốt khi sử dụng php từ CMD của cửa sổ
iewebguy

7

Đây là của tôi:

class sbwDebug
{
    public static function varToHtml($var = '', $key = '')
    {
        $type = gettype($var);
        $result = '';

        if (in_array($type, ['object', 'array'])) {
            $result .= '
        <table class="debug-table">
            <tr>
            <td class="debug-key-cell"><b>' . $key . '</b><br/>Type: ' . $type . '<br/>Length: ' . count($var) . '</td>
            <td class="debug-value-cell">';

            foreach ($var as $akey => $val) {
                $result .= sbwDebug::varToHtml($val, $akey);
            }
            $result .= '</td></tr></table>';
        } else {
            $result .= '<div class="debug-item"><span class="debug-label">' . $key . ' (' . $type . '): </span><span class="debug-value">' . $var . '</span></div>';
        }

        return $result;
    }
}

Tạo kiểu với:

table.debug-table {
  padding: 0;
  margin: 0;
  font-family: arial,tahoma,helvetica,sans-serif;
  font-size: 11px;
}

td.debug-key-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

td.debug-value-cell {
  vertical-align: top;
  padding: 3px;
  border: 1px solid #AAAAAA;
}

div.debug-item {
  border-bottom: 1px dotted #AAAAAA;
}

span.debug-label {
  font-weight: bold;
}

2
Thực sự không tệ. Có lẽ đã được bình chọn nhiều hơn nếu bạn đưa ra một ví dụ về đầu ra.
Mawg nói rằng phục hồi Monica

@acSlater Hoạt động với tôi, bạn chỉ cần tạo sbwDebuglớp mà anh ta quên đăng và đặt chức năng trong đó.
Dennis98

6

Gần đây tôi đã phát triển một tiện ích mở rộng chrome miễn phí (đang hoạt động) để làm đẹp các bãi chứa var của tôi mà không có thư viện, không có thẻ trước và không cài đặt cho mỗi ứng dụng. Tất cả được thực hiện với JavaScript và regEx. Tất cả bạn phải làm là cài đặt phần mở rộng và tốt của bạn để đi. Tôi cũng đang làm việc trên một phiên bản Firefox. Đây là trang GitHub. Tôi hy vọng sẽ sớm có nó trên các trang web chrome và firefox!

https://github.com/alexnaspo/var_dumpling

Đây là một ví dụ đầu ra:

Ví dụ đầu ra


6
tốt đấy anh bạn! chỉ cần tải về phần mở rộng của bạn và nó hoạt động hoàn hảo! Cảm ơn!
coryj

5
Anh bạn ... cảm ơn bạn. Tôi đã tìm kiếm một cái gì đó như thế này trong một thời gian
Broadbent

1
Không có thật. Lựa chọn tốt nhất chưa!
Christian

Đã thử với Firefox 15, nó nói không tương thích. Bất kỳ cơ hội để bỏ qua điều này?
cyberfly

1
Điều này thật đẹp, ước gì tôi đã tìm thấy nó sớm hơn!


2

Những thư viện ưa thích là tuyệt vời ... ngoại trừ chi phí. Nếu bạn muốn một var_dump đơn giản, đẹp, có tham số vô hạn, hãy thử chức năng của tôi. Nó thêm một số HTML đơn giản. Các thuộc tính dữ liệu cũng được thêm vào, nếu bạn sử dụng HTML5, các phiên bản thấp hơn sẽ bỏ qua chúng, nhưng giúp dễ dàng mở phần tử trong bảng điều khiển trình duyệt và nhận thêm một chút thông tin nếu những gì bạn thấy trên màn hình là không đủ.

Bố cục rất đơn giản, không có phí. Cung cấp một tấn thông tin cho từng tham số bao gồm những thứ như gettypevà thậm chí classtên cho các bãi chứa Object (bao gồm cả XML). Nó đã được thử và đúng, tôi đã sử dụng nó trong nhiều năm.

function preDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;padding:0em 3em 1em 1em;"><legend><b>preDump: '.count($args).' Parameters Found.</b></legend>';
        foreach (func_get_args() as $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(preDump: )[0-9]+/', 'preDump: '.(count($args)-1), $sb); continue; }
            $sb .= '<pre data-type="'.gettype($arg).'"';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                    $sb .= ' data-dump="json_encode"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= json_encode($arg);
                    break;
                case "string":
                    $sb .= ' data-dump="echo"><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')</b></p><p>';
                    $sb .= $arg;
                    break;
                default:
                    $sb .= ' data-dump="var_dump"';
                    if (is_object($arg)) $sb .= 'data-class="'.get_class($arg).'"';
                    $sb .= '><p style="border-bottom:1px solid;margin:0;padding:0 0 0 1em;"><b>gettype('.gettype($arg).')';
                    if (is_object($arg)) $sb .= ' ['.get_class($arg).']';
                    $sb .= '</b></p><p>';
                    ob_start();
                    var_dump($arg);
                    $sb .= ob_get_clean();
                    if (ob_get_length()) ob_end_clean();
            }
            $sb .= '</p></pre>';
        }
        $sb .= '</fieldset></div>';
    }
    else {
        $sb = '<div style="margin: 1em 0;"><fieldset style="display:inline-block;"><legend><b>preDump: [ERROR]</b></legend><h3>No Parameters Found</h3></fieldset></div>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Và nếu bạn sử dụng Codeigniter, hãy thêm nó vào CÂU HỎI ĐƠN GIẢN. Đầu tiên, đi đến application/config/autoload.phpvà chắc chắn rằng helper 'string'là trên.

$autoload['helper'] = array( 'string' ); 

Sau đó chỉ cần đi tạo một file có tên MY_string_helper.phptrong application/helpersvà đơn giản chèn các chức năng trong một điển hình iftuyên bố để kiểm tra sự tồn tại.

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
    if (!function_exists('preDump')) {
        function preDump() {
            ...
        }
    }
//  DON'T CLOSE PHP

| HOẶC |, nếu bạn muốn đưa nó theo một hướng khác.

Đoạn mã sau giống như trên, ngoại trừ sẽ hiển thị các biến của bạn trong bảng điều khiển trình duyệt. Điều này đôi khi có thể giúp dễ dàng gỡ lỗi các cuộc gọi đối tượng sql và các cuộc gọi mảng và đối tượng khác khi bạn thiếu tên khóa hoặc bất cứ điều gì.

function consoleDump() {    //  use string "noEcho" to just get a string return only
    $args = func_get_args();
    $doEcho = TRUE; $sb;
    if ($args) {
        $sb = '<script type="text/javascript">console.log("<" + new Array('.(count($args) < 10 ? '49': '48').').join("-") + "[consoleDump: '.count($args).' items]" + new Array(50).join("-") + ">"); console.log([';

        foreach (func_get_args() as $i => $arg) {
            if (gettype($arg) == 'string') if ($arg == 'noEcho') { $doEcho = FALSE; $sb = preg_replace('/(consoleDump: )[0-9]+/', 'consoleDump: '.(count($args)-1), $sb); continue; }
            $sb .= '{ "type": "'.gettype($arg).'", ';
            switch (gettype($arg)) {
                case "boolean":
                case "integer":
                case "string":
                    $sb .= '"value": '.json_encode($arg);
                    break;
                default:
                    $sb .= '"value": '.json_encode($arg);
                    if (is_object($arg) || is_array($arg)) $sb .= ', "count": '.json_encode(count((array)$arg));
                    if (is_object($arg)) $sb .= ', "objectClass": "'.get_class($arg).'"';
            }
            $sb .= '}';
            if ($i < count($args)-1) $sb .= ', ';
        }
        $sb .= ']); console.log("<" + new Array(120).join("-") + ">"); </script>';
    }
    else {
        $sb = '<script type="text/javascript">console.log("<" + new Array(120).join("-") + ">");console.log("consoleDump: [ERROR] No Parameters Found");console.log("<" + new Array(120).join("-") + ">");</script>';
    }
    if ($doEcho) echo($sb);
    return $sb;
}

Làm việc với tất cả mọi thứ!

consoleDump($simpXMLvar, $_SESSION, TRUE, NULL, array( 'one' => 'bob', 'two' => 'bill' ), (object)array( 'one' => 'bob', 'two' => 'bill' ));


<------------------------------------------------[consoleDump: 6 items]------------------------------------------------->
[Object, Object, Object, Object, Object, Object] 
// This drops down to show your variables in JS objects, like:
    0: Object
        count: 4
        objectClass: "SimpleXMLElement"
        type: "object"
        value: Object
        __proto__: Object
        // ...etc...
<-----------------------------------------------------------------------------------------------------------------------> 

1
Tại sao người ta phải lo lắng về hiệu suất không đáng kể giảm trong một công cụ phát triển? Hàm này theo nghĩa đen echo '<pre>';var_dump($var);echo '</pre>';cộng với một số văn bản thêm giá trị không.
raveren

@Raveren yea ngoại trừ preDump('value', TRUE, array( 'bob => 'bill' ), (object)array( 'bob => 'bill' )' is quick and easy and gives a nice layout visually in the browser that shows each variable passed in it's own "area" with a type label, thus making debugging quick and easy. And since it's a snippet i keep in my IDE's toolbox, i can recall it with ease on any needed page or while working with any library. But sure, it's just an tiếng vang 'pre'; var_dump` với một số simple htmlxung quanh nó, không phải văn bản thêm 0 giá trị. lol kik. Nếu bạn không thích nó, đừng sử dụng nó. Chỉ là một gợi ý.
SpYk3HH

@Raveren Và nếu bạn thích điều đó ... bạn sẽ thực sự thích cập nhật của tôi: P
SpYk3HH

1

Công cụ làm đẹp mảng PHP Công cụ đơn giản này lấy một mảng hoặc đối tượng đầu ra trong PHP, chẳng hạn như câu lệnh print_r () và định dạng nó trong mã màu để dễ dàng đọc dữ liệu của bạn. http://phillihp.com/toolz/php-array-beautifier/


không hoạt động với đầu ra var_dump, ngắt dấu ngoặc kép, trông cực kỳ khó hiểu cho các bãi lớn hơn.
raveren

1

Một phiên bản trồng tại nhà khác:

http://github.com/perchten/neat_html

Tôi thích nghĩ rằng nó khá linh hoạt. Nó không nhắm đến môi trường đầu ra cụ thể nhưng có một loạt các đối số tùy chọn mà bạn có thể chỉ định tại sao thay đổi đầu ra / in hoặc hành vi, cũng như một số cài đặt liên tục.




1

Nếu bạn đang xử lý các mảng rất lớn trong PHP, chức năng này có thể giúp:

function recursive_print ($varname, $varval) {
  if (! is_array($varval)):
    print $varname . ' = ' . var_export($varval, true) . ";<br>\n";
  else:
    print $varname . " = array();<br>\n";
    foreach ($varval as $key => $val):
      recursive_print ($varname . "[" . var_export($key, true) . "]", $val);
    endforeach;
  endif;
}

Về cơ bản, nó kết xuất toàn bộ mảng trong đó mỗi phần tử nằm trong một dòng riêng biệt, điều này có lợi để tìm đúng đường dẫn đầy đủ cho các phần tử nhất định.

Ví dụ đầu ra:

$a = array();
$a[0] = 1;
$a[1] = 2;
$a[2] = array();
$a[2][0] = 'a';
$a[2][1] = 'b';
$a[2][2] = 'c';

Xem: Làm thế nào để xuất mảng PHP trong đó mỗi cặp khóa-giá trị nằm trong một dòng riêng biệt?


1

Tôi ngạc nhiên không ai đề cập đến mã dễ nhất (mặc dù không đẹp lắm). Nếu bạn chỉ muốn có được một đầu ra có thể đọc được (không có màu sắc hoặc thụt đầu dòng), thì đơn giản <pre>xung quanh một var_dumptác phẩm, như trong:

echo "<pre>";
var_dump($myvariable);
echo "</pre>";

Không thể có được chi phí thấp hơn nhiều so với điều này!



0

Sở thích của tôi là gỡ lỗi từ https://github.com/hazardland/debug.php là thư viện chỉ chứa một hàm duy nhất có tên là gỡ lỗi (Bạn chỉ có thể sao chép chức năng đó trong dự án hoặc trong thư viện của mình) . Đầu ra html gỡ lỗi () điển hình trông như thế này:

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

Nhưng bạn có thể xuất dữ liệu dưới dạng văn bản đơn giản với cùng chức năng (với 4 tab được thụt vào không gian) như thế này (và thậm chí đăng nhập nó trong tệp nếu cần):

string : "Test string"
boolean : true
integer : 17
float : 9.99
array (array)
    bob : "alice"
    1 : 5
    2 : 1.4
object (test2)
    another (test3)
        string1 : "3d level"
        string2 : "123"
        complicated (test4)
            enough : "Level 4"

0

TVarDumper

Đây là một công cụ tuyệt vời nhằm thay thế hàm PHP bị lỗi var_dumpprint_rvì nó có thể xác định chính xác các đối tượng được tham chiếu đệ quy trong một cấu trúc đối tượng phức tạp. Nó cũng có một điều khiển độ sâu đệ quy để tránh hiển thị đệ quy không xác định của một số biến đặc thù.

Xem : TVarDumper.php.


Đối với các giải pháp thay thế khác cung cấp nhiều lợi thế hơn var_dumpprint_rcó thể hỗ trợ các tham chiếu vòng tròn, vui lòng kiểm tra: Sử dụng print_r và var_dump với tham chiếu vòng tròn .


Để biết thêm ý tưởng, hãy kiểm tra thêm: Làm thế nào để bạn gỡ lỗi các tập lệnh PHP?


0

Của tôi, đơn giản hơn, đối với tôi, tôi không có nhiều kiến ​​thức / thời gian để thay đổi cơ sở hạ tầng cài đặt xdebug, v.v.

Và trong các trường hợp khác, bạn không cần nhiều cho một trang web WP đơn giản chẳng hạn

Vì vậy, tôi sử dụng:

highlight_string("\n<?" . var_export($var, true) . "?>\n");

Điều đó thực sự giúp tôi rất nhiều.

nhưng vì tôi thích Môi trường DevConsole nên tôi sử dụng chức năng đơn giản nhưng tuyệt vời này:

https://codeinphp.github.io/post/outpocking-php-to-browser-console/

Tinh chỉnh nhỏ:

<?php 

/**
 * Logs messages/variables/data to browser console from within php
 *
 * @param $name: message to be shown for optional data/vars
 * @param $data: variable (scalar/mixed) arrays/objects, etc to be logged
 * @param $jsEval: whether to apply JS eval() to arrays/objects
 *
 * @return none
 * @author Sarfraz
 */
function logConsole($name, $data = NULL, $jsEval = FALSE)
{
     if (! $name) return false;

     $isevaled = false;
     $type = ($data || gettype($data)) ? 'Type: ' . gettype($data) : '';

     if ($jsEval && (is_array($data) || is_object($data)))
     {
          $data = 'eval(' . preg_replace('#[\s\r\n\t\0\x0B]+#', '', json_encode($data)) . ')';
          $isevaled = true;
     }
     else
     {
          $data = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
     }

     # sanitalize
     $data = $data ? $data : '';
     $search_array = array("#'#", '#""#', "#''#", "#\n#", "#\r\n#");
     $replace_array = array('"', '', '', '\\n', '\\n');
     $data = preg_replace($search_array,  $replace_array, $data);
     $data = ltrim(rtrim($data, '"'), '"');
     $data = $isevaled ? $data : ($data[0] === "'") ? $data : "'" . $data . "'";

$js = <<<JSCODE
\n<script>
// fallback - to deal with IE (or browsers that don't have console)
if (! window.console) console = {};
console.log = console.log || function(name, data){};
// end of fallback

console.log('===== PHP Dump =====');
console.log('$name');
console.log('$type');
console.log($data);
console.log('===== / PHP Dump =====');
console.log('\\n');
</script>
JSCODE;

     echo $js;
} # end logConsole

0

Một lựa chọn khác là

composer require symfony/var-dumper --save-dev

Sau đó, trong tệp của bạn, bạn chỉ cần sử dụng dump($var) và bạn sẽ có một đầu ra như vậynhập mô tả hình ảnh ở đây


0

Tôi đã phải thêm một câu trả lời ở đây vì tôi không thực sự muốn trải qua các bước trong các giải pháp khác. Nó cực kỳ đơn giản và không yêu cầu mở rộng, bao gồm vv và là những gì tôi thích. Nó rất dễ dàng và rất nhanh.

Đầu tiên chỉ cần json_encode biến trong câu hỏi:

echo json_encode($theResult);

Sao chép kết quả mà bạn nhận được vào Trình soạn thảo JSON tại http://jsoneditoronline.org/ chỉ cần sao chép nó vào khung bên trái, nhấp vào Sao chép> và nó sẽ in JSON theo định dạng cây rất đẹp.

Với mỗi người, nhưng hy vọng điều này sẽ giúp một số người khác có thêm một lựa chọn tốt đẹp! :)

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.