web-dev-qa-db-fra.com

Comment afficher (dans 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 de longs tableaux imbriqués. En conséquence, une grande partie de ma vie est consacrée à l'utilisation de la flèche, retour , et les touches de tabulation, pour diviser plus de 1000 chaînes de caractères en un format imbriqué et lisible.

Pour drupal devs, je ne peux pas utiliser dsm () de dvel (), car je travaille avec des formulaires # ahah/# ajax à plusieurs étapes, et je ne peux que générer les tableaux dans le journal des erreurs. , pas à l'écran.

Exemple visuel:

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

Edit: 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).

81
Mark Shiraldi

Si vous devez enregistrer une erreur dans le journal des erreurs Apache, vous pouvez essayer ceci:

error_log( print_r($multidimensionalarray, TRUE) );
174
Akhilraj N S

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 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 devez aussi le formater en HTML, vous pouvez utiliser la balise <pre>

24
Fivell

Truc simple:

En utilisant print_r, var_dump ou var_export devrait le faire assez bien si vous regardez le résultat en mode d'affichage source, pas en mode HTML, ou comme @Joel Larson l'a dit, si vous mettez tout dans un <pre> tag.

print_r est préférable pour la lisibilité, mais n'imprime pas les valeurs null/false.

var_dump est préférable pour vérifier les types de valeurs et de longueurs et les valeurs null/false.

var_export est semblable à var_dump mais il peut être utilisé pour obtenir la chaîne déchargée.

Le format renvoyé par l’un de ceux-ci est correctement mis en retrait dans le code source et var_export peut être utilisé pour la journalisation, car il peut être utilisé pour renvoyer la chaîne vidée.

Trucs avancés:

Utilisez le plug-in xdebug pour PHP ceci affiche var_dumps en tant que chaînes HTML formatées et non en tant que format de vidage brut, vous permet également de fournir une fonction personnalisée que vous souhaitez utiliser pour le formatage.

7
Mihai Stancu

Drupal module Devel possède d'autres fonctions utiles, notamment des fonctions permettant d'imprimer des tableaux et des objets formatés dans des fichiers journaux. Voir le guide sur 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. Toutes les sorties de cette fonction sont ajoutées au 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 variante de Linux, vous pouvez utiliser la commande "tail -f drupal_debug.txt" pour voir les données enregistrées dans le fichier.

2
nmc

Cela vous aidera

echo '<pre>';

$output = print_r($array,1);

echo '</pre>';

EDIT

utiliser echo '<pre>'; est inutile, mais var_export($var); fera ce que vous attendez.

1
code-jaff

Vous devriez pouvoir utiliser var_dump () dans une balise pré. Sinon, vous pourriez envisager d'utiliser une bibliothèque comme dump_r.php: https://github.com/leeoniya/dump_r.php

Ma solution est incorrecte. OP recherchait une solution formatée avec des espaces à stocker dans un fichier journal.

Une solution pourrait être d'utiliser la mise en mémoire tampon de sortie avec var_dump, puis str_replace () tous les onglets avec des espaces pour le formater dans le fichier journal.

0
Joel Larson