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

6 minutos de lectura

avatar de usuario
Marcos Shiraldi

Estoy trabajando en un sitio de Drupal y al depurar, siempre tengo que leer matrices anidadas largas. Como resultado, paso una gran parte de mi vida usando las teclas de flecha, retorno y tabulador para dividir más de 1000 cadenas de caracteres en un formato anidado y legible.

Para los desarrolladores de Drupal, no puedo usar el dsm() de devel, ya que estoy trabajando con formularios #ahah/#ajax de varios pasos, y solo puedo enviar las matrices al registro de errores, no a la pantalla.

Ejemplo visual:

Demonio:

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 siento, por “no mostrar en pantalla”, quise decir a través de los mensajes del sistema de Drupal donde es posible generar matrices en un formato anidado en el que se puede hacer clic (usando devel.module).

  • ‘.print_r($array,1).’

    ‘; ?>

    – Rufino

    9 de agosto de 2012 a las 13:53

avatar de usuario
Akhilraj NS

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

error_log( print_r($multidimensionalarray, TRUE) );

  • parece que es print_r (minúsculas). Lo hace print_R realmente funciona igual de bien?

    – evanrmurphy

    29 de julio de 2016 a las 21:13

  • gracias @AkhilrajNS, ¿puede decirme más sobre cómo puedo enviar la consulta insertada o cualquier consulta que se ejecute sobre este mensaje de registro?

    – ankit suthar

    19 de enero de 2017 a las 3:52

  • @ankitsuthar ¿Quiso decir Consulta SQL?

    – Akhilraj NS

    10 de febrero de 2017 a las 5:27

  • Sí, pero lo obtuve con la última función de consulta en CI. En realidad, quiero registrar datos que se insertan o editan, eliminan.

    – ankit suthar

    10 de febrero de 2017 a las 5:56

  • Esto es tonto. Esto genera caracteres de nueva línea como literal \n en lugar de nuevas líneas reales.

    – Oteo

    24 de octubre de 2018 a las 10:09

avatar de usuario
cinco

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 puedes 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> etiqueta

  • Lea la pregunta: OP debe hacer esto para la salida de registro, no para la salida de pantalla.

    – Mate

    9 de agosto de 2012 a las 13:55

  • @Matt leyó la respuesta, if you need to format it also in html

    – código-jaff

    9 de agosto de 2012 a las 14:08

  • @Fivell, lo intento. Si aclara su respuesta para explicar que la salida se puede enviar al archivo de registro, eliminaré mi -1.

    – Mate

    9 de agosto de 2012 a las 14:11

  • @Fivell hay un pequeño problema con trigger_error limita los mensajes a una longitud máxima de 1024 o algo similar. Haciendo un poco más var_exports/print_r las cuerdas se cortan. Es útil para estructuras simples.

    – Mihai Stancu

    9 de agosto de 2012 a las 14:19

avatar de usuario
Mihai Stancu

Cosas simples:

Usando print_r, var_dump o var_export debería hacerlo bastante bien si observa el resultado en el modo de fuente de vista, no en el modo HTML o como dijo @Joel Larson si envuelve todo en un <pre> etiqueta.

print_r es mejor para la legibilidad pero no imprime valores nulos/falsos.

var_dump es mejor para verificar tipos de valores y longitudes y valores nulos/falsos.

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

El formato devuelto por cualquiera de estos está sangrado correctamente en el código fuente y var_export se puede usar para iniciar sesión, ya que se puede usar para devolver la cadena volcada.

Cosas avanzadas:

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

  • Lee la respuesta var_export le permite devolver una cadena.

    – Mihai Stancu

    9 de agosto de 2012 a las 13:58

avatar de usuario
brujo

Me pregunto por qué nadie usa o recomienda la forma en que prefiero depurar una matriz:

error_log(json_encode($array));

Junto a mi navegador yo tail mi servidor inicia sesión en la consola, por ejemplo.

tail -f /var/log/apache2/error.log

avatar de usuario
nmc

de Drupal Módulo de desarrollo tiene otras funciones útiles, incluidas las que pueden imprimir matrices y objetos formateados en archivos de registro. Ver 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 agrega al archivo de registro, lo que facilita ver cómo cambia el contenido de una variable a medida que modifica su código.

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

Si está usando una versión de Linux, puede usar el comando “tail -f drupal_debug.txt” para ver los datos que se registran en el archivo.

avatar de usuario
Mihai Stancu

Esto te ayudara

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

EDITAR

usando echo '<pre>'; es inútil, pero var_export($var); hará lo que esperas.

Debería poder usar un var_dump() dentro de una etiqueta previa. De lo contrario, podría considerar usar 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 almacenamiento en búfer de salida con var_dump, luego str_replace() todas las pestañas con espacios para formatearlas en el archivo de registro.

  • Lea la pregunta: OP debe hacer esto para la salida de registro, no para la salida de pantalla.

    – Mate

    9 de agosto de 2012 a las 13:55

  • Leí la pregunta. Se me pasó ese último pequeño comentario. Gracias por hacérmelo saber. Esta solución no va a funcionar entonces.

    – Joel Larson

    9 de agosto de 2012 a las 13:59

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad