Лучший способ отладки массива с помощью PHP

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

EDIT:

теперь я понимаю, что print_r() - не единственное решение для отладки массивов. Так что если у вас есть другие решения, которые были бы прекрасны, а также узнать больше об отладке.

EDIT2:

Ayesh K, ITroubs и Роберт Росас упомянули как Krumo и Кинт это далеко, если у вас есть другие, не стесняйтесь размещать их. Также благодаря Raveren для написания Kint!

10 ответов


все говорит о print_r который находится в ядре и работает очень хорошо. Но когда дело доходит до просмотра большого массива print_r() приводит меня в бешенство, сужая выход.

дать попробовать krumo. Он красиво печатает массив с визуальным форматированием, нажмите-разверните, а также дает вам точный вызов ключа массива, который вы можете просто скопировать и вставить.

<?php
 krumo($my_array);
?>

Itroubs указано Кинт как лучшая альтернатива Krumo. (Спасибо ITroubs!)


каждый разработчик PHP должен иметь функцию для этого. Моя функция ниже:

function r($var){
    echo '<pre>';
    print_r($var);
    echo '</pre>';
}

чтобы красиво печатать данные, просто позвоните r($data);. Если вы хотите больше деталей, вы можете использовать эту функцию:

function d($var){
    echo '<pre>';
    var_dump($var);
    echo '</pre>';
}

вот моя...

демо: http://o-0.me/dump_r/
РЕПО: https://github.com/leeoniya/dump_r.php
композитор: https://packagist.org/packages/leeoniya/dump-r

при необходимости вы можете изменить его с помощью css.

enter image description here


Я используем var_dump....теперь, если вы хотите еще, проверьте этот сайт:

http://raveren.github.io/kint/

и

http://krumo.sourceforge.net/


рекомендуется визуально видеть значения / Ключи в массиве следующим образом:

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

true требуется, поскольку он изменяет его в строку, вывод будет:

array(
     key1 => value,
     key2 => value,
     ...
     )

быстрое решение: откройте исходный код страницы и вы увидите print_r's выход в несколько строк и идеально отступом.


print_r не один (он использует \n как новая строка, а не <br>). Добавить <pre>...</pre> вокруг него, чтобы показать несколько строк.


print_r() использует \n в качестве разделителя строк. Использовать <pre> теги или просмотреть исходный код страницы, чтобы она выглядела правильно. (на Windows, Linux работает с \n)


вы можете посмотреть исходный код или использовать var_dump() или print_r() С <pre>...</pre>


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

вот мой:

if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] == 'Debug')
{
    echo '<strong><i>FILE : </i></strong>'.__FILE__.'<strong> <i>LINE : </i></strong>'.__LINE__.'<pre>';
    print_r($var);
    echo '</pre>';
    die;
}

это утверждение if должно гарантировать, что другие люди не видят, что вы напечатали. Существует хорошее дополнение для Mozila-Firefox и Google Chrome под названием "User agent switcher", где вы можете создавать свои пользовательские агенты. Поэтому я создаю пользовательский агент под названием "Debug" , и когда я работаю, я меняю пользователя агент.

если я использую агент пользователя по умолчанию, ничего не произойдет, и страница не будет die;, только вы и люди, которые также изменяют пользовательский агент на "Debug", увидите напечатанную переменную. Это полезно, если вы хотите отладить проблему в рабочей среде, и вы не хотите, чтобы страница die; и это тоже хорошо, если другие люди также работают над проектом и вы не хотите прерывать их, убивая странице.

затем я откликаюсь на текущий файл и строку, это полезно, когда вы работаете в рамках или CMS или любого другого большого проекта с тысячами файлов и папок, и во время отладки, если вы можете забыть, где вы набрали die; или exit; и вы должны помнить, где вы были и какие переменные вы напечатали.

Я использую IDE NetBeans для разработки PHP, у меня есть макрос, поэтому, когда вы выбираете переменную и используете ее, она вставит этот инструмент отладки в текстовый редактор и поместит выбор внутри print_r(); функция. Если вы также используете NetBeans, вы можете использовать этот макрос:

cut-to-clipboard
"if(isset($_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_USER_AGENT'] == 'Debug')"
insert-break
"{"
insert-break
"echo '<strong><i>FILE : </i></strong>'.__FILE__.'<strong> <i>LINE :</i></strong>'.__LINE__.'<pre>';"
insert-break
"print_r("
paste-from-clipboard
remove-line-begin 
");"
insert-break
"echo '</pre>';"
insert-break
"die;"

вам просто нужно выбрать $variable и использовать макрос.