2011-12-16 36 views
18

Làm thế nào tôi có thể in một mảng nên thay vì là tất cả một dòng duy nhất như:Mảng in PHP với một phím trên mỗi dòng để nó dễ dàng hơn trên mắt?

Array ([0] => Array ([Palabra] => correr [Tipo] => Verbo) [1] => Array ([Palabra] => es [Tipo] => Verbo [PersonaSujeto] => tercera [CantidadSujeto] => singular [Tiempo] => presente) 

Nó hiển thị một cái gì đó dễ đọc hơn như thế này hoặc tương tự:

Array ( 
    [0] => Array ( 
     [Palabra] => correr 
     [1] => Array ( 
      [Tipo] => Verbo 
      [Tiempo] => Infinitivo)) 
    [1] => Array ( 
     [Palabra] => es 
     [Tipo] => Verbo 
     [PersonaSujeto] => tercera 
     [CantidadSujeto] => singular 
     [Tiempo] => presente) 
+5

bạn có ý nghĩa như: 'echo '

'; print_r($array); echo '
';' –

+1

yeah, chắc chắn ông có nghĩa là như thế :) – Alfabravo

Trả lời

57

Nó được in ra với một ngắt dòng, nhưng trong HTML ngắt dòng là vô nghĩa.Bạn có thể làm một trong 2 điều:

  1. Cho trình duyệt nó không phải là một tài liệu HTML, nhưng một văn bản, bằng cách đặt đoạn mã sau trước khi thông tin được gửi:

    header('Content-type: text/plain'); 
    
  2. Simply có <pre> thẻ xung quanh mảng in:

    echo '<pre>'; print_r($array); echo '</pre>'; 
    
+4

1 cho content-type –

3

Nếu bạn quấn đầu ra của chức năng như print_r, var_dumpvar_export trong thẻ <pre>, thẻ sẽ được định dạng tương đối độc đáo.

Lý do là do đầu ra của các hàm là văn bản thuần túy, nhưng khi bạn nhìn vào nó trong trình duyệt, trình duyệt sẽ xem nó là HTML. Các ký tự dòng mới trong đầu ra chữ thô không có ý nghĩa đối với HTML, vì các dòng mới bị bỏ qua.

Để xem tính năng này hoạt động, hãy thử xem nguồn - bạn sẽ thấy đầu ra được định dạng độc đáo ở đó.

pre Thẻ HTML cho trình duyệt biết "mọi thứ bên trong khối này là pre -formated". Các dòng mới được coi là dòng mới, khoảng cách được tôn trọng (HTML cũng không quan tâm đến chuỗi các khoảng trống).

Vì vậy, bạn đang trái với một cái gì đó như thế này:

echo '<pre>'.print_r($my_array).'</pre>'; 

Thay vì làm điều đó khắp nơi trên mã của tôi, tôi muốn sử dụng một chức năng tổng hợp như thế này (tôi gọi nó print_p nên rất nhưprint_r)

function print_p($value = false, $exit = false, $return=false, $recurse=false) { 
    if ($return === true && $exit === true) 
     $return = false; 
    $tab = str_repeat("&nbsp;", 8); 
    if ($recurse == false) { 
     $recurse = 0; 
     $output = '<div style="width:100%; border: 2px dotted red; background-color: #fbffd6; display: block; padding: 4px;">'; 
     $backtrace = debug_backtrace(); 
     $output .= '<b>Line: </b>'.$backtrace[0]['line'].'<br>'; 
     $output .= '<b>File: </b> '.$backtrace[0]['file'].'<br>'; 
     $indent = ""; 
    } else { 
     $output = ''; 
     $indent = str_repeat("&nbsp;", $recurse * 8); 
    } 
    if (is_array($value)) { 
     if ($recurse == false) { 
      $output .= '<b>Type: </b> Array<br>'; 
      $output .= "<br>array (<br>"; 
     } else { 
      $output .= "array (<br>"; 
     } 
     $items = array(); 
     foreach ($value as $k=>$v) { 
      if (is_object($v) || is_array($v)) 
       $items[] = $indent.$tab."'".$k."'=>".print_p($v, false, true, ($recurse+1)); 
      else 
       $items[] = $indent.$tab."'".$k."'=>".($v===null ? "NULL" : "'".$v."'"); 
     } 
     $output .= implode(',<br>', $items); 
     if ($recurse == false) 
      $output .= '<br>)'; 
     else 
      $output .= '<br>'.$indent.')'; 
    } elseif (is_object($value)) { 
     if ($recurse == false) { 
      $output .= '<b>Type: </b> Object<br>'; 
      $output .= '<br>object ('.get_class($value).'){'."<br>"; 
     } else { 
      $output .= "object (".get_class($value)."){<br>"; 
     } 

     // needed conditional because base class function dump is protected 
     $vars = get_object_vars($value); 
     $vars = (is_array($vars) == true ? $vars : array()); 

     $items = array(); 
     foreach ($vars as $k=>$v) { 
      if (is_object($v) || is_array($v)) 
       $items[] = $indent.$tab."'".$k."'=>".print_p($v, false, true, ($recurse+1)); 
      else 
       $items[] = $indent.$tab."'".$k."'=>".($v===null ? "NULL" : "'".$v."'"); 
     } 
     $output .= implode(',<br>', $items); 
     $vars = get_class_methods($value); 
     $items = array(); 
     foreach ($vars as $v) { 
      $items[] = $indent.$tab.$tab.$v; 
     } 
     $output .= '<br>'.$indent.$tab.'<b>Methods</b><br>'.implode(',<br>', $items); 
     if ($recurse == false) 
      $output .= '<br>}'; 
     else 
      $output .= '<br>'.$indent.'}'; 
    } else { 
     if ($recurse == false) { 
      $output .= '<b>Type: </b> '.gettype($value).'<br>'; 
      $output .= '<b>Value: </b> '.$value; 
     } else { 
      $output .= '('.gettype($value).') '.$value; 
     } 
    } 
    if ($recurse == false) 
     $output .= '</div>'; 
    if ($return === false) 
     echo $output; 
    if ($exit === true) 
     die(); 
    return $output; 
} 

... thì bạn làm như sau:

print_p($my_array); 

... và nhận được kết quả:

enter image description here

này là tốt đẹp vì nó a) sẽ mất bất kỳ loại biến, đối tượng, mảng, chuỗi, và b) cho bạn biết nơi sản lượng đang đến từ. Nó có thể nhận được thực sự bực bội nếu bạn mất theo dõi nơi bạn đã đặt một thông báo gỡ lỗi và phải dành nhiều thời gian tìm kiếm trên tất cả cho nó! :)

+0

Cảm ơn print_p –

0

Thêm <pre>

Ví dụ:

<pre> 
<?php 
    print_r($array); 
?> 
<pre> 
7

Tôi thích làm nổi bật mã. Ví dụ này hiển thị các mảng tuyên chân phước đang tô đậm

<?php 
$debug_data = array(1,2,5,6,8,7,'aaa'); 

echo str_replace(array('&lt;?php&nbsp;','?&gt;'), '', highlight_string('<?php ' .  var_export($debug_data, true) . ' ?>', true)); 
?> 

enter image description here

+0

Tôi nghĩ rằng tôi sẽ để thêm video này vào mã số cá nhân của tôi, thích nó :) –

0
  1. Như câu trả lời khác nói: Đã có newlines và tab trong print_r đầu ra. Và bạn có thể thấy nó bằng cách sử dụng <pre> hoặc xem dưới dạng văn bản thuần túy.

  2. Bạn có thể cài đặt xdebug để làm cho đầu ra của print_r dễ đọc hơn

0

Tất cả các câu trả lời ở trên là tốt. Tôi muốn bao gồm một hàm php debug() trong các chức năng của mình để bất cứ nơi nào trong ứng dụng của tôi, tôi chỉ có thể gọi debug($my_array); để đổ mảng vào màn hình (hoặc html), với một số định dạng dễ đọc. Here it is on github.

Tất nhiên những ngày này hầu hết các máy chủ và khung công tác đều có phiên bản được tích hợp sẵn của riêng nó như thế này, nhưng để xây dựng một cái gì đó từ đầu công trình này.

+0

Liên kết được cung cấp bị hỏng. –

+0

Rất tiếc, cảm ơn những người đứng đầu. Đã sửa. – joshdutcher

1

Đây là những người bạn tốt nhất của một lập trình viên PHP:

function pa($value, $exit = true){ 
    echo "<pre>"; 
    print_r($value); 
    echo "</pre>"; 
    if($exit){ 
    exit(); 
    } 
} 

Nếu bạn cần sử dụng như thế này:

pa($arr); 

hoặc

pa($obj); 

Nếu bạn không muốn thoát

pa($obj, false); 
Các vấn đề liên quan