Intereting Posts
Как получить реферер, платные / натуральные и ключевые слова для текущего посетителя на PHP с помощью новой Google Analytics? Graph возвратил ошибку: Invalid appsecret_proof, предоставленный в аргументе API который является лучшим array_search или in_array? Подготовить команды в интерактивном режиме CLI codeIgniter использует mysql_real_escape_string () вместо. Проблема подключения к базе данных многомерный массив, сравнивающий значения PHP set_time_limit никакого эффекта WordPress: PHP Неустранимая ошибка: вызов неопределенной функции get_option () Обработка ошибок в следующем SQL-запросе Как установить (UTF8) модификатор для RegEx маршрута RegEx в Zend Framework 2? PHP Использование str_replace вместе с preg_replace Не удается войти в PHP / MySQL Может ли session_start () в php испортить длину моих сеансов пользователей? разница в безопасности между (double) $ user_input и bind_param ('d', $ user_input) Как указать, что ожидается, что тест PHPUnit завершится неудачей?

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

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

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

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

Solutions Collecting From Web of "Есть ли неплохой шрифт для PHP?"

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

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

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

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

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

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

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

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

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

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

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

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

Как насчет print_r?

http://www.php.net/print_r

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

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

 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] => Массив
(
[x] => 111
[y] => 222
[z] => 333
)
)

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

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

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

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

отправить в syslog или журнал событий для окон

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

Там также Zend_Debug .

Я не видел, чтобы кто-то упоминал о том, что вы выполняете «запятую» с вашей командой print_r, а затем вы можете использовать ее встроенный с html, не просматривая все обручи или многоразовые поисковые решения.

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

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

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

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

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

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

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

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

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

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

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

Массив ([root] => 1 [sub1] => Array () [sub2] => Array () [sub3] => Array () [sub4] => Array () …

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

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

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

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

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

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

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

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

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

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

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

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

Развернувшись на ответе @ 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; } 

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

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

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

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

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

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

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

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

Типичный вывод debug () 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" 

В 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

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

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

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

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

Есть также некоторые глобально доступные (но хорошо скопированные) помощники при использовании настроек более экологичным образом

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

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