112 votes

Comment sortir (vers un journal) un tableau à plusieurs niveaux dans un format lisible par l'homme ?

Je travaille sur un site Drupal et lors du débogage, je dois toujours lire des tableaux longs et imbriqués. En conséquence, je passe une grande partie de ma vie à utiliser les touches flèche, retour et tabulation pour diviser des chaînes de plus de 1000 caractères en un format imbriqué et lisible.

Pour les développeurs drupal, je ne peux pas utiliser la fonction dsm() de Devel, car je travaille avec des formulaires #ahah/#ajax à plusieurs étapes, et je ne peux afficher les tableaux que dans le journal des erreurs, pas à l'écran.

Exemple visuel :

Le 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' => '', ),...

Bien :

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', 
        ), 

Modifier : Désolé, par "pas de sortie à l'écran", je voulais dire via les messages système de Drupal où il est possible de sortir des tableaux dans un format cliquable et imbriqué (en utilisant devel.module).

241voto

Akhilraj N S Points 2236

Si vous avez besoin d'enregistrer une erreur dans le journal des erreurs d'Apache, vous pouvez essayer ceci :

error_log( print_r($multidimensionalarray, TRUE) );

23voto

Fivell Points 5521

http://php.net/manual/en/function.print-r.php Cette fonction peut être utilisée pour formater la sortie,

$output = print_r($array,1);

$output est une variable de type chaîne, elle peut être enregistrée comme toute autre chaîne. En php pur, vous pouvez utiliser trigger_error

Ex. trigger_error($output);

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

si vous avez besoin de le formater également en html, vous pouvez utiliser <pre> étiquette

9voto

Mihai Stancu Points 8866

C'est simple :

Utilisation de print_r , var_dump o var_export devrait faire l'affaire si vous regardez le résultat en mode view-source et non en mode HTML ou, comme l'a dit @Joel Larson, si vous enveloppez tout dans une balise <pre> étiquette.

print_r est la meilleure solution pour la lisibilité, mais elle n'imprime pas les valeurs nulles ou fausses.

var_dump est la meilleure solution pour vérifier les types de valeurs, les longueurs et les valeurs nulles/fausses.

var_export est similaire à var_dump mais il peut être utilisé pour obtenir la chaîne de caractères vidée.

Le format renvoyé par l'un de ces éléments est indenté correctement dans le code source et var_export peut être utilisé pour la journalisation puisqu'il peut être utilisé pour retourner la chaîne vidée.

Des trucs avancés :

Utilisez le plug-in xdebug pour PHP, cela imprime var_dump en tant que chaînes de caractères au format HTML et non en tant que format de vidage brut, et vous permet également de fournir une fonction personnalisée que vous souhaitez utiliser pour le formatage.

7voto

wittich Points 1178

Je me demande simplement pourquoi personne n'utilise ou ne recommande la méthode que je préfère pour déboguer un tableau :

error_log(json_encode($array));

A côté de mon navigateur, je tail le journal de mon serveur dans la console, par exemple.

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

2voto

nmc Points 7022

Drupal Module Devel possède d'autres fonctions utiles, notamment celles qui permettent d'imprimer des tableaux et des objets formatés dans des fichiers journaux. Consultez le guide à l'adresse http://ratatosk.net/drupal/tutorials/debugging-drupal.html

dd()

Enregistre toute variable dans un fichier nommé "drupal_debug.txt" dans le répertoire temporaire du site. répertoire temporaire du site. Toute la sortie de cette fonction est ajoutée au fichier le fichier journal, ce qui permet de voir facilement comment le contenu d'une variable change lorsque vous modifiez votre code.

Si vous utilisez Mac OS X, vous pouvez utiliser la console de journalisation pour surveiller le contenu du fichier journal.

Si vous utilisez une version de Linux, vous pouvez utiliser la commande "tail -f". drupal_debug.txt" pour observer les données enregistrées dans le fichier.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X