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

PHP массив печати с одним ключом на строку, чтобы это было проще на глазах?

Как я могу напечатать массив, чтобы вместо одной строки, например:

Array ( [0] => Array ( [Palabra] => correr [Tipo] => Verbo ) [1] => Array ( [Palabra] => es [Tipo] => Verbo [PersonaSujeto] => tercera [CantidadSujeto] => singular [Tiempo] => presente ) 

Отображает что-то более читаемое, подобное этому или тому подобное:

Array ( 
    [0] => Array ( 
        [Palabra] => correr
        [1] => Array ( 
             [Tipo] => Verbo 
             [Tiempo] => Infinitivo) )
    [1] => Array ( 
        [Palabra] => es 
        [Tipo] => Verbo 
        [PersonaSujeto] => tercera 
        [CantidadSujeto] => singular 
        [Tiempo] => presente ) 
4b9b3361

Ответ 1

Он распечатывается с разрывом строки, но в HTML разрывы строк не имеют смысла. Вы можете сделать одну из двух вещей:

  • Сообщите браузеру не HTML-документ, а текст, поместив следующий код перед отправкой любого результата:

    header('Content-type: text/plain');
    
  • Для печатного массива просто есть теги <pre>:

    echo '<pre>'; print_r($array); echo '</pre>';
    

Ответ 2

Мне нравится подсветка кода. В этом примере отображается бешеный массив с выделенным кодом

<?php
$debug_data = array(1,2,5,6,8,7,'aaa');

echo str_replace(array('&lt;?php&nbsp;','?&gt;'), '', highlight_string( '<?php ' .     var_export($debug_data, true) . ' ?>', true ) );
?>

enter image description here

Ответ 3

Если вы завершите вывод таких функций, как print_r, var_dump и var_export в теге <pre>, он будет относительно красиво отформатирован.

Причина в том, что вывод функций - это простой текст, но когда вы смотрите на него в браузере, браузер считает его HTML. Новые символы строки в выводе открытого текста не имеют смысла для HTML, поскольку новые строки игнорируются.

Чтобы увидеть это в действии, попробуйте просмотреть источник - вы увидите там хорошо отформатированный вывод.

Тег pre HTML указывает браузеру "все внутри этого блока pre -formated". Новые строки рассматриваются как новые строки, соблюдение интервала (HTML тоже не заботится о последовательностях пробелов).

Итак, у вас осталось что-то вроде этого:

echo '<pre>'.print_r($my_array).'</pre>';

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

function print_p($value = false, $exit = false, $return=false, $recurse=false) {
    if ($return === true && $exit === true)
        $return = false;
    $tab = str_repeat("&nbsp;", 8);
    if ($recurse == false) {
        $recurse = 0;
        $output = '<div style="width:100%; border: 2px dotted red; background-color: #fbffd6; display: block; padding: 4px;">';
        $backtrace = debug_backtrace();
        $output .= '<b>Line: </b>'.$backtrace[0]['line'].'<br>';
        $output .= '<b>File: </b> '.$backtrace[0]['file'].'<br>';
        $indent = "";
    } else {
        $output = '';
        $indent = str_repeat("&nbsp;", $recurse * 8);
    }
    if (is_array($value)) {
        if ($recurse == false) {
            $output .= '<b>Type: </b> Array<br>';
            $output .= "<br>array (<br>";
        } else {
            $output .= "array (<br>";
        }
        $items = array();
        foreach ($value as $k=>$v) {
            if (is_object($v) || is_array($v))
                $items[] = $indent.$tab."'".$k."'=>".print_p($v, false, true, ($recurse+1));
            else
                $items[] = $indent.$tab."'".$k."'=>".($v===null ? "NULL" : "'".$v."'");
        }
        $output .= implode(',<br>', $items);
        if ($recurse == false)
            $output .= '<br>)';
        else
            $output .= '<br>'.$indent.')';
    } elseif (is_object($value)) {
        if ($recurse == false) {
            $output .= '<b>Type: </b> Object<br>';
            $output .= '<br>object ('.get_class($value).'){'."<br>";
        } else {
            $output .= "object (".get_class($value)."){<br>";
        }

        // needed conditional because base class function dump is protected
        $vars = get_object_vars($value);
        $vars = (is_array($vars) == true ? $vars : array());

        $items = array();
        foreach ($vars as $k=>$v) {
            if (is_object($v) || is_array($v))
                $items[] = $indent.$tab."'".$k."'=>".print_p($v, false, true, ($recurse+1));
            else
                $items[] = $indent.$tab."'".$k."'=>".($v===null ? "NULL" : "'".$v."'");
        }
        $output .= implode(',<br>', $items);
        $vars = get_class_methods($value);
        $items = array();
        foreach ($vars as $v) {
            $items[] = $indent.$tab.$tab.$v;
        }
        $output .= '<br>'.$indent.$tab.'<b>Methods</b><br>'.implode(',<br>', $items);
        if ($recurse == false)
            $output .= '<br>}';
        else
            $output .= '<br>'.$indent.'}';
    } else {
        if ($recurse == false) {
            $output .= '<b>Type: </b> '.gettype($value).'<br>';
            $output .= '<b>Value: </b> '.$value;
        } else {
            $output .= '('.gettype($value).') '.$value;
        }
    }
    if ($recurse == false)
        $output .= '</div>';
    if ($return === false)
        echo $output;
    if ($exit === true)
        die();
    return $output;
}

... тогда вы это сделаете:

print_p($my_array);

... и получить результат:

enter image description here

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

Ответ 4

Это лучший друг программиста PHP:

function pa($value, $exit = true){
  echo "<pre>";
  print_r($value);
  echo "</pre>";
  if($exit){
    exit();
  }
}

Если вам нужно использовать вот так:

pa($arr);

или

pa($obj);

Если вы не хотите выйти из

pa($obj, false);

Ответ 5

Добавить <pre>

Пример:

<pre>
<?php
    print_r($array);
?>
<pre>

Ответ 6

  • Как говорят другие ответы: в выводе print_r уже есть новые строки и вкладки. И вы можете увидеть это с помощью <pre> или увидеть как обычный текст.

  • Вы можете установить xdebug, чтобы сделать вывод print_r более удобочитаемым

Ответ 7

Все вышеприведенные ответы хороши. Мне нравится включать функцию debug() php в мои функции, поэтому в любом месте моего приложения я могу просто позвонить debug($my_array);, чтобы выгрузить массив на экран (или html), с некоторым хорошим форматированием удобочитаемости. Здесь он находится на github.

Конечно, в наши дни большинство серверов и фреймворков имеют собственную встроенную версию чего-то подобного, но для создания чего-то с нуля это работает.