Подтвердить что ты не робот

Есть ли неплохой шрифт для PHP?

Я исправляю некоторые скрипты PHP, и мне не хватает рубинового принтера. то есть.

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

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

4b9b3361

Ответ 1

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

$arr = array('one' => 1);
print_r($arr);
var_dump($arr);

Ответ 2

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

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

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

Ответ 3

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

Ответ 4

Лучшее, что я нашел, это следующее:

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

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

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

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

Ответ 5

Для 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 и ваш браузер позаботятся о отступов и сделать его разборчивым.

Ответ 7

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

Ответ 8

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

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
    [bar] = > 888
    [poo] = > Array
        (
            [x] = > 111
            [y] = > 222
          [n] = > 333
         )
)

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

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

Если для этого параметра установлено значение TRUE, print_r() вернет а не распечатать его.

Ответ 9

Это небольшая функция, которую я использую все время, когда она удобна, если вы отлаживаете массивы. Параметр 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
||---------------------------------||

Ответ 10

error_log(print_r($variable,true));

для отправки в syslog или eventlog для Windows

Ответ 12

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

print "session: <br><pre>".print_r($_SESSION, true)."</pre><BR>";

Ответ 13

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

принимает php 4.3.0 +:

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

Ответ 14

Эта функция работает очень хорошо, пока вы устанавливаете 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;
}
?>

Ответ 15

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

Ответ 16

Хороший цветной выход:

echo svar_dump (array ( "a", "b" = > "2", "c" = > array ( "d", "e" = > array ( "f", "g" ))));

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

введите описание изображения здесь

Источник:

<?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');
    }
}

Ответ 17

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

ob_start() ;  print_r( $json ); $ob_out=ob_get_contents(); ob_end_clean(); echo "\$json".str_replace( '}', "}\n", $ob_out );

Ответ 18

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

Array ([root] = > 1 [sub1] = > Array() [sub2] = > Array() [sub3] = > Array() [sub4] = > Array()...

в правильно отображаемое представление:

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

  [sub2] => Array
      (
      )

  [sub3] => Array
      (
      )

  [sub4] => Array
      (
      )...

Ответ 19

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

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

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

Ответ 20

Вот версия 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;
}

Ответ 21

Здесь еще один простой дамп без всех накладных расходов 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

Ответ 22

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

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

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

Ответ 23

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

Ответ 24

    <?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

Ответ 25

Развернувшись на @stephen answer, добавьте несколько незначительных настроек для показа.

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

Ответ 26

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

$x= array(1,2,3);
echo "<pre>".var_export($x,1)."</pre>";

Ответ 27

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

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

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

Ответ 28

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

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

введите описание изображения здесь

Но вы можете выводить данные как обычный текст с одинаковой функцией (с 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"

Ответ 29

В 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

Ответ 30

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

http://github.com/perchten/neat_html/

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

Он обрабатывает файлы, объекты, массивы, нули против ложных и т.п.

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

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

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