Я ищу, чтобы иметь возможность создавать красиво отформатированную таблицу со строками и столбцами из содержимого инструкции print_r array?php print_r nice table
Любые идеи?
Я ищу, чтобы иметь возможность создавать красиво отформатированную таблицу со строками и столбцами из содержимого инструкции print_r array?php print_r nice table
Любые идеи?
Ваш вопрос немного расплывчато, но вы имеете в виду что-то вроде этого:
URL-адрес загрузки на этой странице плохо сформирован - правильная ссылка: http://dbug.ospinto.com/dl/dBug.zip. –
Я могу на самом деле рекомендовать http://raveren.github.io/kint/ – Toskan
Попробуйте это, можно было бы улучшить, но он работает.
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;
}
Как вы можете адаптировать эту функцию, чтобы она возвращала окончательную построенную строку вместо печати таблицы? – user3574492
@ user3574492: Отбросьте строки 'echo' и сохраните их в переменной вместо конкатенации. Затем функция возвращает переменную. –
Вот очень простой способ печати довольно массивы с HTML предварительно тегом:
<?php
$myarray = array('a','b','c');
echo '<pre>';
print_r($myarray);
echo '</pre>';
?>
Это решение является простым, но эффективным. Только то, что мне нужно! –
Или этот однострочный: 'echo '
" . print_r($myarray, true) . ""; ' –
Это фантастика – Eoin
Вот еще один хороший пример того, что я нашел. Такой же выход, более длинный код, немного больше цвета.
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);
}
}
Что вы определяете, как "красиво отформатирована"? Вы хотите HTML-таблицу? Некоторые XML? JSON? CVS? Человеко-читаемый открытый текст? – strager
Вместо использования 'print_r' просто используйте foreach в массиве, как предлагает jasondavis, ниже. Кроме того, в соответствии с комментарием strager я бы повторил запрос для * конкретного * запроса/вопроса. Это помогло бы, по крайней мере, узнать, что находится в * массиве, является ли это * одним *, * двумя *, * трехмерными * ..? –