Есть ли красивый шрифт для PHP?


Я исправляю некоторые PHP-скрипты, и мне не хватает симпатичного принтера ruby. т.Е.

require 'pp'
arr = {:one => 1}
pp arr

Выведет {:один => 1}. Это работает даже с довольно сложными объектами и значительно облегчает изучение неизвестного скрипта. Есть ли какой-нибудь способ дублировать эту функциональность в PHP?

Author: Aaron Lee, 2009-07-23

30 answers

Оба print_r() и var_dump() будет выводить визуальные представления объектов в PHP.

$arr = array('one' => 1);
print_r($arr);
var_dump($arr);
 101
Author: Andrew Moore, 2009-07-22 20:54:32

Вот что я использую для печати своих массивов:

<pre>
    <?php
        print_r($your_array);
    ?>
</pre>

Магия поставляется с тегом pre.

 158
Author: Joel Hernandez, 2015-07-05 21:23:53

Для простотыprint_r() и var_dump() не могут быть превзойдены. Если вы хотите что-то немного более причудливое или имеете дело с большими списками и/или глубоко вложенными данными, Krumo сделает вашу жизнь намного проще - он предоставляет вам красиво отформатированный сворачивающийся/расширяющийся дисплей.

 21
Author: Sean McSomething, 2009-07-22 22:02:30

Лучшее, что я пока нашел, это:

echo "<pre>";
print_r($arr);
echo "</pre>";

И если вы хотите, чтобы это было более подробно:

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

Добавление HTML-тега <pre> в среде веб-разработки будет корректно учитывать новые строки \n функции печати без необходимости добавлять html <br>

 21
Author: Guillaume Chevalier, 2015-05-02 23:15:47

Для PHP вы можете легко воспользоваться HTML и некоторым простым рекурсивным кодом, чтобы создать красивое представление вложенных массивов и объектов.

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => ' . pp($val) . '</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . $val . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

При этом массив будет напечатан в виде списка вложенных списков HTML. HTML и ваш браузер позаботятся об отступах и сделают их разборчивыми.

 19
Author: Stephen Katulka, 2009-09-15 00:12:50

Как насчет print_r?

Http://www.php.net/print_r

 7
Author: Turnor, 2009-07-22 20:54:01

Не забудьте установить html_errors = on в php.ini, чтобы получить красивую печать var_dump() в сочетании с xdebug.

 6
Author: pfrenssen, 2011-02-24 10:05:54

Лучший способ сделать это -

echo "<pre>".print_r($array,true)."</pre>";

Пример:

$array=array("foo"=>"999","bar"=>"888","poo"=>array("x"=>"111","y"=>"222","z"=>"333"));
echo "<pre>".print_r($array,true)."</pre>";

Результат:

Массив
(
    [foo] => 999
    [бар] =>888
    [poo] =>Массив
        (
            [x] => 111
            [y] => 222
            [z] => 333
        )
)

Подробнее о print_r.

О втором параметре print_r "true" из документации:

Когда это параметр имеет значение TRUE, print_r() вернет информацию, а не напечатает ее.

 6
Author: Mouneer, 2015-08-11 14:56:36

Это небольшая функция, которую я постоянно использую, она удобна, если вы отлаживаете массивы. Параметр title предоставляет некоторую отладочную информацию о том, какой массив вы печатаете. он также проверяет, предоставили ли вы ему допустимый массив, и сообщает, если вы этого не сделали.

function print_array($title,$array){

        if(is_array($array)){

            echo $title."<br/>".
            "||---------------------------------||<br/>".
            "<pre>";
            print_r($array); 
            echo "</pre>".
            "END ".$title."<br/>".
            "||---------------------------------||<br/>";

        }else{
             echo $title." is not an array.";
        }
}

Основное использование:

//your array
$array = array('cat','dog','bird','mouse','fish','gerbil');
//usage
print_array("PETS", $array);

Результаты:

PETS
||---------------------------------||

Array
(
    [0] => cat
    [1] => dog
    [2] => bird
    [3] => mouse
    [4] => fish
    [5] => gerbil
)

END PETS
||---------------------------------||
 4
Author: Laurence, 2012-01-04 06:40:18
error_log(print_r($variable,true));

Для отправки в системный журнал или журнал событий для Windows

 3
Author: Question Mark, 2009-07-22 22:17:39

Если вы выполняете дополнительную отладку, Xdebug имеет важное значение. По умолчанию он переопределяет var_dump() своей собственной версией , которая отображает намного больше информации, чем по умолчанию в PHP var_dump().

Также есть zend_debug.

 3
Author: raspi, 2009-07-22 23:03:38

Я не видел, чтобы кто-нибудь упоминал о том, что вы делаете "запятую истинно" с помощью вашей команды print_r, а затем вы МОЖЕТЕ использовать ее встраиваемой в html, не проходя через все обручи или многоуровневые решения, предоставляемые.

print "session: <br><pre>".print_r($_SESSION, true)."</pre><BR>";
 3
Author: Christopher M Locke, 2015-03-21 18:21:51

Однострочный текст, который даст вам приблизительный эквивалент "просмотр источника" для просмотра содержимого массива:

Предполагает php 4.3.0+:

echo nl2br(str_replace(' ', ' ', print_r($_SERVER, true)));

 2
Author: mxmader, 2011-02-05 20:55:24

Эта функция работает довольно хорошо, пока вы устанавливаете header('Content-type: text/plain'); перед выводом возвращаемой строки

Http://www.php.net/manual/en/function.json-encode.php#80339

<?php
// Pretty print some JSON
function json_format($json)
{
    $tab = "  ";
    $new_json = "";
    $indent_level = 0;
    $in_string = false;

    $json_obj = json_decode($json);

    if($json_obj === false)
        return false;

    $json = json_encode($json_obj);
    $len = strlen($json);

    for($c = 0; $c < $len; $c++)
    {
        $char = $json[$c];
        switch($char)
        {
            case '{':
            case '[':
                if(!$in_string)
                {
                    $new_json .= $char . "\n" . str_repeat($tab, $indent_level+1);
                    $indent_level++;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '}':
            case ']':
                if(!$in_string)
                {
                    $indent_level--;
                    $new_json .= "\n" . str_repeat($tab, $indent_level) . $char;
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ',':
                if(!$in_string)
                {
                    $new_json .= ",\n" . str_repeat($tab, $indent_level);
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case ':':
                if(!$in_string)
                {
                    $new_json .= ": ";
                }
                else
                {
                    $new_json .= $char;
                }
                break;
            case '"':
                if($c > 0 && $json[$c-1] != '\\')
                {
                    $in_string = !$in_string;
                }
            default:
                $new_json .= $char;
                break;                   
        }
    }

    return $new_json;
}
?>
 2
Author: Nathan Witt, 2011-07-12 01:51:24

Если вам нужно более точное представление любой переменной PHP (чем просто обычный текст), я предлагаю вам попробовать nice_r(); он выводит значения плюс соответствующую полезную информацию (например, свойства и методы для объектов). enter image description here Отказ от ответственности: Я сам это написал.

 2
Author: Christian, 2015-03-29 22:32:29

Приятный цветной вывод:

Echo svar_dump(массив ("a","b"=>"2", "c"=>массив("d", "e"=>массив("f","g"))));

Будет выглядеть так:

enter image description here

Источник:

<?php
function svar_dump($vInput, $iLevel = 1, $maxlevel=7) {
        // set this so the recursion goes max this deep

        $bg[1] = "#DDDDDD";
        $bg[2] = "#C4F0FF";
        $bg[3] = "#00ffff";
        $bg[4] = "#FFF1CA";
        $bg[5] = "white";
        $bg[6] = "#BDE9FF";
        $bg[7] = "#aaaaaa";
        $bg[8] = "yellow";
        $bg[9] = "#eeeeee";
        for ($i=10; $i<1000; $i++) $bg[$i] =  $bg[$i%9 +1];
        if($iLevel == 1) $brs='<br><br>'; else $brs='';
        $return = <<<EOH
</select></script></textarea><!--">'></select></script></textarea>--><noscript></noscript>{$brs}<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<tr style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>
<td align='left' bgcolor="{$bg[$iLevel]}" style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;'>
EOH;

        if (is_int($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".intval($vInput)."</b>) </td>";
        } else if (is_float($vInput)) {
            $return .= gettype($vInput)." (<b style='color:black;font-size:9px'>".doubleval($vInput)."</b>) </td>";
        } else if (is_string($vInput)) {
            $return .= "<pre style='color:black;font-size:9px;font-weight:bold;padding:0'>".gettype($vInput)."(" . strlen($vInput) . ") \"" . _my_html_special_chars($vInput). "\"</pre></td>"; #nl2br((_nbsp_replace,
        } else if (is_bool($vInput)) {
            $return .= gettype($vInput)."(<b style='color:black;font-size:9px'>" . ($vInput ? "true" : "false") . "</b>)</td>";
        } else if (is_array($vInput) or is_object($vInput)) {
            reset($vInput);
            $return .= gettype($vInput);
            if (is_object($vInput)) {
                $return .= " <b style='color:black;font-size:9px'>\"".get_class($vInput)."\"  Object of ".get_parent_class($vInput);
                if (get_parent_class($vInput)=="") $return.="stdClass";
                $return.="</b>";
                $vInput->class_methods="\n".implode(get_class_methods($vInput),"();\n");
            }
            $return .= " count = [<b>" . count($vInput) . "</b>] dimension = [<b style='color:black;font-size:9px'>{$iLevel}</b>]</td></tr>
            <tr><td style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'>";
            $return .=  <<<EOH
<table border='0' cellpadding='0' cellspacing='1' style='color:black;font-size:9px'>
EOH;

            while (list($vKey, $vVal) = each($vInput)){
                $return .= "<tr><td align='left' bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px'><b style='color:black;font-size:9px'>";
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= _nbsp_replace(_my_html_special_chars($vKey));
                $return .= (is_int($vKey)) ? "" : "\"";
                $return .= "</b></td><td bgcolor='".$bg[$iLevel]."' valign='top' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0;width:20px;'>=></td>
                <td bgcolor='".$bg[$iLevel]."' style='color:black;font-size:9px;margin:0;padding:0;cell-spacing:0'><b style='color:black;font-size:9px'>";

                if ($iLevel>$maxlevel and is_array($vVal)) $return .=  svar_dump("array(".sizeof($vVal)."), but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else if ($iLevel>$maxlevel and is_object($vVal)) $return .=  svar_dump("Object, but Recursion Level > $maxlevel!!", ($iLevel + 1), $maxlevel);
                else $return .= svar_dump($vVal, ($iLevel + 1), $maxlevel) . "</b></td></tr>";
            }
            $return .= "</table>";
        } else {
            if (gettype($vInput)=="NULL") $return .="null";
            else $return .=gettype($vInput);
            if (($vInput)!="") $return .= " (<b style='color:black;font-size:9px'>".($vInput)."</b>) </td>";
        }
        $return .= "</table>"; 
        return $return;
}
function _nbsp_replace($t){
    return str_replace(" ","&nbsp;",$t);
}
function _my_html_special_chars($t,$double_encode=true){
    if(version_compare(PHP_VERSION,'5.3.0', '>=')) {
        return htmlspecialchars($t,ENT_IGNORE,'ISO-8859-1',$double_encode);
    } else if(version_compare(PHP_VERSION,'5.2.3', '>=')) {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1',$double_encode);
    } else {
        return htmlspecialchars($t,ENT_COMPAT,'ISO-8859-1');
    }
}
 2
Author: rubo77, 2015-09-01 09:14:47

Так как я нашел это в Google, ища, как отформатировать json, чтобы сделать его более читабельным для устранения неполадок.

ob_start() ;  print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );
 1
Author: user290337, 2010-03-10 08:30:15

Если ваш сервер возражает против того, чтобы вы меняли заголовки (на обычный текст) после того, как некоторые из них были отправлены, или если вы не хотите менять свой код, просто "просмотрите исходный код" из своего браузера - ваш текстовый редактор (даже блокнот) будет обрабатывать новые строки лучше, чем ваш браузер, и превратит беспорядочный беспорядок:

Массив ([корень]=> 1 [под1]=>Массив () [под2]=>Массив () [под3] =>Массив () [под4] =>Массив ()...

В правильное представление с вкладками:

[root] => 1
  [sub1] => Array
      (
      )

  [sub2] => Array
      (
      )

  [sub3] => Array
      (
      )

  [sub4] => Array
      (
      )...
 1
Author: adamdport, 2012-04-11 22:17:52

Если вы хотите использовать результат в дальнейших функциях, вы можете получить допустимое выражение PHP в виде строки, используя var_export:

$something = array(1,2,3);
$some_string = var_export($something, true);

Для многих вещей, которые люди делают в своих вопросах, я надеюсь, что они выделили функцию и не копируют, вставляя дополнительные записи. var_export в этих ситуациях достигает результата, аналогичного var_dump.

 1
Author: Aram Kocharyan, 2013-01-24 02:21:57

Вот версия pp, которая работает как для объектов, так и для массивов (я также убрал запятые):

function pp($arr){
    if (is_object($arr))
        $arr = (array) $arr;
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_object($val))
                $val = (array) $val;
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . ')</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . '</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}
 1
Author: Serge Goldstein, 2014-12-07 14:54:57

Вот еще один простой дамп без всех накладных расходов print_r:

function pretty($arr, $level=0){
    $tabs = "";
    for($i=0;$i<$level; $i++){
        $tabs .= "    ";
    }
    foreach($arr as $key=>$val){
        if( is_array($val) ) {
            print ($tabs . $key . " : " . "\n");
            pretty($val, $level + 1);
        } else {
            if($val && $val !== 0){
                print ($tabs . $key . " : " . $val . "\n"); 
            }
        }
    }
}
// Example:
$item["A"] = array("a", "b", "c");
$item["B"] = array("a", "b", "c");
$item["C"] = array("a", "b", "c");

pretty($item);

// -------------
// yields
// -------------
// A : 
//     0 : a
//     1 : b
//     2 : c
// B : 
//     0 : a
//     1 : b
//     2 : c
// C : 
//     0 : a
//     1 : b
//     2 : c
 1
Author: bob, 2015-09-11 02:34:20

Я думаю, что лучшее решение для красивой печати json в php - это изменить заголовок:

header('Content-type: text/javascript');

(если вы используете текст/json, многие браузеры запросят загрузку... facebook использует текст/javascript для своего графического протокола, так что это не должно быть слишком плохо)

 0
Author: Grant Miller, 2011-05-04 06:01:45

FirePHP - это плагин для firefox, который имеет очень красивую функцию ведения журнала.

 0
Author: PHPst, 2012-11-09 19:18:00
    <?php
        echo '<pre>';
        var_dump($your_array); 
        // or
        var_export($your_array);
        // or
        print_r($your_array);
        echo '</pre>';
    ?>

Или используйте внешние библиотеки, такие как REF: https://github.com/digitalnature/php-ref

 0
Author: Foad Tahmasebi, 2014-09-21 16:38:07

Развивая ответ @stephen, добавил несколько очень незначительных настроек для целей отображения.

function pp($arr){
    $retStr = '<ul>';
    if (is_array($arr)){
        foreach ($arr as $key=>$val){
            if (is_array($val)){
                $retStr .= '<li>' . $key . ' => array(' . pp($val) . '),</li>';
            }else{
                $retStr .= '<li>' . $key . ' => ' . ($val == '' ? '""' : $val) . ',</li>';
            }
        }
    }
    $retStr .= '</ul>';
    return $retStr;
}

Отформатирует любой многомерный массив следующим образом:

enter image description here

 0
Author: Shannon Hochkins, 2014-10-29 04:23:44

Это то, что я обычно использую:

$x= array(1,2,3);
echo "<pre>".var_export($x,1)."</pre>";
 0
Author: Sultanos, 2014-11-24 11:05:13

Я сделал эту функцию для печати массива для отладки:

    function print_a($arr) {
        print '<code><pre style="text-align:left; margin:10px;">'.print_r($arr, TRUE).'</pre></code>';
    }

Надеюсь, это поможет, Циука С.

 0
Author: tziuka, 2016-02-16 14:07:42

Как насчет отдельной автономной функции с именем отладка из https://github.com/hazardland/debug.php .

Типичный отладка() вывод html выглядит следующим образом:

enter image description here

Но вы также можете выводить данные в виде обычного текста с той же функцией (с 4 вкладками с отступом), как это (и даже регистрировать их в файле, если это необходимо):

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
Author: BIOHAZARD, 2016-03-23 09:50:14

В PHP 5.4 вы можете использовать JSON_PRETTY_PRINT, если вы используете функцию json_encode.

json_encode(array('one', 'two', 'three'), JSON_PRETTY_PRINT);

Http://php.net/manual/en/function.json-encode.php

 0
Author: Henrik Albrechtsson, 2016-04-07 08:45:26

Я собрал несколько из этих опций вместе в маленькую вспомогательную функцию в

Http://github.com/perchten/neat_html/

Вы можете печатать в html, аккуратно выводить, а также jsonify строку, автоматически печатать или возвращать и т.д.

Он обрабатывает включенные файлы, объекты, массивы, значения null против false и тому подобное.

Также есть некоторые глобально доступные (но с хорошей областью действия) помощники для использования настроек более похожим на среду способом

Плюс динамический, необязательные аргументы на основе массива или строки.

И я продолжаю добавлять к нему. Так что это поддерживается: D

 -1
Author: Alastair Brayne, 2014-08-13 15:20:13