Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1503 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Print_r like

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Print_r like

n°1810989
korrigan33
Qui ne tente rien n'a rien
Posté le 11-11-2008 à 23:58:27  profilanswer
 

Bonjour à tous !
 
Pour les besoins d'un tuto, je voulais faire un print_r qui soit joli (une sorte de coloration syntaxique), j'ai presque réussit, seulement il semblerais que print_r affiche des choses que je n'ai pas avec foreach...
 
Petit exemple :

//Ma fonction affiche :  
    [prenom] => Prenom de l'utilisateur
    [numeros] => SimpleXMLElement Object
        (
            [numero] => 0102030405
            [numero] => 0212345678
        )
//Alors que print_r affiche :  
    [prenom] => Prenom de l'utilisateur
    [numeros] => SimpleXMLElement Object
        (
            [numero] => Array
                (
                    [0] => 0102030405
                    [1] => 0212345678
                )
 
        )


Print_r m'affiche aussit defois un [@attribute] alors que ma fonction ne les affiche jamais.
Quelqu'un aurais une idée ?
 
PS : Mon but et d'obtenir un print_r coloré, si quelqu'un connais un autre solution, mais je doit garder la forme du print_r pour ne pas dérouter les lecteurs.
 
Merci d'avance pour vos réponses !

mood
Publicité
Posté le 11-11-2008 à 23:58:27  profilanswer
 

n°1810995
ionik
Posté le 12-11-2008 à 07:58:46  profilanswer
 

pour le tableau tu dois avoir un test si c'est un array (is_array)
donc en faite tu recupere son indice et valeur avec un foreach au lieu de recupere sa valeur ceux qui te donnera la meme chose
 
soit  
 
foreach($maval as $id=>$val){
 
}


---------------
Recette cookeo Recette de cuisine
n°1811003
korrigan33
Qui ne tente rien n'a rien
Posté le 12-11-2008 à 08:27:34  profilanswer
 

Merci pour ta réponse, mais
 
je fait déjà comme ça, c'est juste que print_r semble rajouter des clefs quand on a deux fois la même clef (courant pour du XML).
 
Je vous colle mon code, comme ça si il y en a qui veulent l'utiliser, il fonctionne déja trés bien, mais la différence avec print_r me dérange encore :

function debug_r($var, $print=true, $tab='') {
  $str = '';
  if(is_array($var) || is_object($var)) {
   if(count($var)>0 || (string)$var==''){
    $str .= '<span style="color:#DD0047">';
    if(is_array($var)){
     $str .= 'Array';
    }else if(is_object($var)){
     $str .= get_class($var).' Object';
    }
    $str .= "</span>\n".$tab."(\n";
     
    foreach($var as $k => $v){
     $str .= $tab."    [<strong>$k</strong>] => ".debug_r($v, false, $tab.'        ')."\n";
    }
    $str .= $tab." )";
   }else{
    $str = '<span style="color:#4a9b2f">'.(string)$var.'</span>';
   }
  } else {
   if(is_string($var)) {
    $str = '<span style="color:#4a9b2f">"'.htmlentities($var).'"</span>';
   } else {
    $str = '<span style="color:#936d96">'.$var.'</span>';
   }
  }
  if($print)
   echo $str;
  else
   return $str;
 }


 
Je pense que le bug peut venir du fait que l'objet SimpleXMLElement contient des fonctions pour guider foreach, et donc nous "caches" certains paramètres...
Si quelqu'un connai un moyen d'obtenir la même chose que print_r je suis trés preneur.


Message édité par korrigan33 le 12-11-2008 à 08:29:34
n°1811036
ionik
Posté le 12-11-2008 à 10:34:41  profilanswer
 

regarde cela
http://www.php.net/SimpleXML
et prend les fonction que tu as besoin le type simpleXML est assez particulier
Je l'utilise tous les jours


---------------
Recette cookeo Recette de cuisine
n°1811039
korrigan33
Qui ne tente rien n'a rien
Posté le 12-11-2008 à 10:38:42  profilanswer
 

Bonjour, merci pour la réponse.
 
Je connais bien SimpleXML, je rédige le tuto sur ça justement, mais le probleme ne vien pas forcément de SimpleXML, je voudrais une fonction qui affiche exactement la même chose que print_r.
 
Et que même pour les classe "spéciales" comme SimpleXML, je me retrouve avec la même chose mais coloré...
 
Voila, je sait pas si c'est possible...

n°1811040
ionik
Posté le 12-11-2008 à 10:41:44  profilanswer
 

creér une variable $i avant le parcours de cette object xml et incrémente sa valeur a chaque passage et écrit sa valeur en id de la valeur du tableau ceci reprendra le meme principe que pour print_r


---------------
Recette cookeo Recette de cuisine
n°1811106
CAJAX
Posté le 12-11-2008 à 12:27:43  profilanswer
 

Code :
  1. echo str_replace('<span style="color: #0000BB">&lt;?&nbsp;</span>','',highlight_string('<? '.var_export($test,true),true));


 


Message édité par CAJAX le 12-11-2008 à 12:36:12
n°1811131
korrigan33
Qui ne tente rien n'a rien
Posté le 12-11-2008 à 13:44:36  profilanswer
 

Bonjour CAJAX,
 
Merci pour ta réponse, mais essaye de lire ce que j'ai écrit...
 
Je veux un résultat identique a print_r, ce qui n'est pas le clas avec var_export, et highlight_string ne fonctionne pas avec print_r, n'en reconnaissant pas la syntaxe...
 
Je croie que je vais finir par refaire une fonction du genre de highlight_string, mais qui parse un print_r, si j'avais pu éviter ça aurais était pamal...
 
Si vous voyez une solution...

n°1811182
CAJAX
Posté le 12-11-2008 à 15:04:21  profilanswer
 

Mmm.. Je ferais cela avec les expressions régulières..

n°1811187
korrigan33
Qui ne tente rien n'a rien
Posté le 12-11-2008 à 15:10:20  profilanswer
 

Oui je croie que c'est finalement la solution la plus simple aussi j'ai pondu la solution suivante :

 


 function print_r_highlighted($var, $return = false){
  $str = print_r($var, true);
 
  if($return===true)
   return highlight_print_r($str, true);
  else
   highlight_print_r($str);
 }
 function highlight_print_r($str, $return = false){
 
  $search = array(
   "/\[(@?\w*)] => (\w+ Object|Array)/",
   "/\[(@?\w*)] => (.*)/",
   "/(\w+ Object|Array)(\n\s*\()/",
   "/([\[\]\(\)]|=> )/"
  );
  $replace = array(
   "[<span style=\"color:#01B\">$1</span>] => <span style=\"color:#01B\">$2</span>",
   "[<span style=\"color:#01B\">$1</span>] => <span style=\"color:#c22710\">$2</span>",
   "<span style=\"color:#c22710\">$1</span>$2",
   "<span style=\"color:#070\">$1</span>"
  );
 
  $str = preg_replace($search, $replace, $str);
 
  if($return===true){
   return $str;
  }else{
   echo $str;
  }
 }

 

La premiere permet d'appeler la deuxième avec une variable en argument, la deuxième permet de colorer le résultat d'un print_r.

 

J'ai utiliser le paramètre $return pour calquer le fonctionnement de print_r et highlight_string

 

Merci a tous pour vos réponses, et bonne journée !


Message édité par korrigan33 le 12-11-2008 à 15:10:58

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Print_r like

 

Sujets relatifs
Arret script et print dans une pageSite "BashVDMNorris" like
Problème bizarre avec l'instruction LIKERequete LIKE sur plusieurs champ == Filtre
Quelqu'un peut me faire un man print ?INNER JOIN et Like
[Résolu] ndd.net/includes/print.php en ndd.net/print.phprequete utilisant LIKE %%
Google Calendar like ? ?[XSLT] Générer une documentation "javadoc/doxygen"-like
Plus de sujets relatifs à : Print_r like


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR