¿Cómo generar (a un registro) una matriz de varios niveles en un formato que sea legible por humanos?


Estoy trabajando en un sitio drupal y al depurar, siempre tengo que leer arreglos largos y anidados. Como resultado, una gran parte de mi vida se gasta usando las teclas de flecha, retorno y tabulación, para dividir más de 1000 cadenas de caracteres en un formato anidado y legible.

Para desarrolladores de drupal, no puedo usar dsm () de devel, ya que estoy trabajando con formularios #ahah/#ajax de varios pasos, y solo puedo generar los arrays en el registro de errores, no en la pantalla.

Visual ejemplo:

Mal:

array ( 'form_wrapper' => array ( '#tree' => true, '#type' => 'fieldset', '#prefix' => '', '#suffix' => '', '#value' => '', 'name' => array ( '#type' => 'textfield', '#title' => NULL, '#size' => 60, '#maxlength' => 60, '#required' => false, '#description' => NULL, '#attributes' => array ( 'placeholder' => 'Email', ), '#post' => array ( 'form_wrapper' => array ( 'name' => '', 'pass' => '', ),
...

Bueno:

array ( 
'form_wrapper' => array ( 
    '#tree' => true, 
    '#type' => 'fieldset', 
    '#prefix' => '<div>', 
    '#suffix' => '</div>', 
    '#value' => '', 
    'name' => array ( 
        '#type' => 'textfield', 
        '#title' => NULL, 
        '#size' => 60, 
        '#maxlength' => 60, 
        '#required' => false, 
        '#description' => NULL, 
        '#attributes' => array ( 
            'placeholder' => 'Email', 
        ), 

Editar : Lo sentimos, por "no salida a la pantalla", me refería a través de mensajes del sistema de drupal donde es posible la salida de matrices en un formato anidado, clicable (usando devel.módulo).

 75
Author: Mark Shiraldi, 2012-08-09

6 answers

Si necesita registrar un error en el registro de errores de Apache, puede probar esto:

error_log( print_r($multidimensionalarray, TRUE) );
 156
Author: Akhilraj N S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-13 01:00:14

Http://php.net/manual/en/function.print-r.php Esta función se puede utilizar para formatear la salida,

$output = print_r($array,1);

$output es una variable de cadena, se puede registrar como cualquier otra cadena. En php puro se puede usar trigger_error

Ex. trigger_error($output);

Http://php.net/manual/en/function.trigger-error.php

Si necesita formatearlo también en html, puede usar <pre> tag

 24
Author: Fivell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-09 14:16:06

Cosas simples:

Utilizando print_r, var_dump o var_export debería hacerlo bastante bien si nos fijamos en el resultado en modo view-source no en modo HTML o como dijo @Joel Larson si se envuelve todo en una etiqueta <pre>.

print_r es mejor para la legibilidad, pero no imprime valores null/false.

var_dump es mejor para verificar tipos de valores y longitudes y valores null/false.

var_export es similar a var_dump pero se puede usar para obtener la cadena descargada.

El formato devuelto por cualquiera de estos se sangra correctamente en el código fuente y var_export se puede utilizar para el registro, ya que se puede utilizar para devolver la cadena objeto de dumping.

Cosas avanzadas:

Use el complemento xdebug para PHP esto imprime var_dump s como cadenas con formato HTML no como formato de volcado raw y también le permite proporcionar una función personalizada que desea usar para formatear.

 5
Author: Mihai Stancu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-09 13:59:43

El módulo de desarrollo de Drupal tiene otras funciones útiles, incluidas las que pueden imprimir matrices y objetos formateados en archivos de registro. Consulte la guía en http://ratatosk.net/drupal/tutorials/debugging-drupal.html

Dd()

Registra cualquier variable en un archivo llamado "drupal_debug.txt" en el directorio temporal del sitio. Toda la salida de esta función se anexa a el archivo de registro, por lo que es fácil ver cómo el contenido de una variable cambiar a medida que modifica tu código.

Si está utilizando Mac OS X, puede usar la consola de registro para monitorear el contenido del archivo de registro.

Si estás usando un tipo de Linux puedes usar el comando "tail-f drupal_debug.txt " para ver los datos que se registran en el archivo.

 2
Author: nmc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-09 14:13:55

Esto te ayudará

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

EDITAR

Usar echo '<pre>'; es inútil, pero var_export($var); hará lo que estás esperando.

 1
Author: code-jaff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-09 14:17:22

Debería ser capaz de usar un var_dump () dentro de una etiqueta pre. De lo contrario, podría buscar el uso de una biblioteca como dump_r.php: https://github.com/leeoniya/dump_r.php

Mi solución es incorrecta. OP estaba buscando una solución formateada con espacios para almacenar en un archivo de registro.

Una solución podría ser usar el búfer de salida con var_dump, luego str_replace() todas las pestañas con espacios para formatearlo en el archivo de registro.

 0
Author: Joel Larson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-09 14:03:35