2009-09-06 4 views
10

Я ищу, чтобы иметь возможность создавать красиво отформатированную таблицу со строками и столбцами из содержимого инструкции print_r array?php print_r nice table

Любые идеи?

+1

Что вы определяете, как "красиво отформатирована"? Вы хотите HTML-таблицу? Некоторые XML? JSON? CVS? Человеко-читаемый открытый текст? – strager

+0

Вместо использования 'print_r' просто используйте foreach в массиве, как предлагает jasondavis, ниже. Кроме того, в соответствии с комментарием strager я бы повторил запрос для * конкретного * запроса/вопроса. Это помогло бы, по крайней мере, узнать, что находится в * массиве, является ли это * одним *, * двумя *, * трехмерными * ..? –

ответ

19

Ваш вопрос немного расплывчато, но вы имеете в виду что-то вроде этого:

http://dbug.ospinto.com/

dbug bar http://dbug.ospinto.com/img/screenshots.png

+3

URL-адрес загрузки на этой странице плохо сформирован - правильная ссылка: http://dbug.ospinto.com/dl/dBug.zip. –

+0

Я могу на самом деле рекомендовать http://raveren.github.io/kint/ – Toskan

12

Попробуйте это, можно было бы улучшить, но он работает.

function myprint_r($my_array) { 
    if (is_array($my_array)) { 
     echo "<table border=1 cellspacing=0 cellpadding=3 width=100%>"; 
     echo '<tr><td colspan=2 style="background-color:#333333;"><strong><font color=white>ARRAY</font></strong></td></tr>'; 
     foreach ($my_array as $k => $v) { 
       echo '<tr><td valign="top" style="width:40px;background-color:#F0F0F0;">'; 
       echo '<strong>' . $k . "</strong></td><td>"; 
       myprint_r($v); 
       echo "</td></tr>"; 
     } 
     echo "</table>"; 
     return; 
    } 
    echo $my_array; 
} 
+0

Как вы можете адаптировать эту функцию, чтобы она возвращала окончательную построенную строку вместо печати таблицы? – user3574492

+0

@ user3574492: Отбросьте строки 'echo' и сохраните их в переменной вместо конкатенации. Затем функция возвращает переменную. –

61

Вот очень простой способ печати довольно массивы с HTML предварительно тегом:

<?php 
$myarray = array('a','b','c'); 
echo '<pre>'; 
print_r($myarray); 
echo '</pre>'; 
?> 
+1

Это решение является простым, но эффективным. Только то, что мне нужно! –

+2

Или этот однострочный: 'echo '

" . print_r($myarray, true) . "
"; ' –

+0

Это фантастика – Eoin

-1

Вот еще один хороший пример того, что я нашел. Такой же выход, более длинный код, немного больше цвета.

function print_nice($elem,$max_level=10,$print_nice_stack=array()){ 
if(is_array($elem) || is_object($elem)){ 
    if(in_array(&$elem,$print_nice_stack,true)){ 
     echo "<font color=red>RECURSION</font>"; 
     return; 
    } 
    $print_nice_stack[]=&$elem; 
    if($max_level<1){ 
     echo "<font color=red>nivel maximo alcanzado</font>"; 
     return; 
    } 
    $max_level--; 
    echo "<table border=1 cellspacing=0 cellpadding=3 >"; 
    if(is_array($elem)){ 
     echo '<tr><td colspan=2 style="background-color:#333333;"><strong><font color=white>ARRAY</font></strong></td></tr>'; 
    }else{ 
     echo '<tr><td colspan=2 style="background-color:#333333;"><strong>'; 
     echo '<font color=white>OBJECT Type: '.get_class($elem).'</font></strong></td></tr>'; 
    } 
    $color=0; 
    foreach($elem as $k => $v){ 
     if($max_level%2){ 
      $rgb=($color++%2)?"#888888":"#BBBBBB"; 
     }else{ 
      $rgb=($color++%2)?"#8888BB":"#BBBBFF"; 
     } 
     echo '<tr><td valign="top" style="width:40px;background-color:'.$rgb.';">'; 
     echo '<strong>'.$k."</strong></td><td>"; 
     print_nice($v,$max_level,$print_nice_stack); 
     echo "</td></tr>"; 
    } 
    echo "</table>"; 
    return; 
} 
if($elem === null){ 
    echo "<font color=green>NULL</font>"; 
}elseif($elem === 0){ 
    echo "0"; 
}elseif($elem === true){ 
    echo "<font color=green>TRUE</font>"; 
}elseif($elem === false){ 
    echo "<font color=green>FALSE</font>"; 
}elseif($elem === ""){ 
    echo "<font color=green>EMPTY STRING</font>"; 
}else{ 
    echo str_replace("\n","<strong><font color=red>*</font></strong><br>\n",$elem); 
} 

}

Смежные вопросы