Maison > développement back-end > tutoriel php > Comment restaurer les données traitées par print_r dans le tableau d'origine via php

Comment restaurer les données traitées par print_r dans le tableau d'origine via php

jacklove
Libérer: 2023-04-01 15:24:01
original
2229 Les gens l'ont consulté

La méthode php print_r peut imprimer et afficher des variables pour les rendre faciles à comprendre. Si la variable est une chaîne, un entier ou un flottant, la valeur de la variable elle-même sera imprimée. Si la variable est un tableau, les clés et les éléments seront affichés dans un certain format. l'objet est similaire à un tableau. print_r est utilisé pour imprimer de grands tableaux.

PHP ne restaure pas nativement les données imprimées par la méthode print_r dans le tableau d'origine, la méthode suivante a donc été écrite pour restaurer les données traitées par print_r dans le tableau d'origine.

RestorePrint.class.php

<?php/**
 * 将print_r处理后的数据还原为原始数组
 * Date:    2016-10-31
 * Author:  fdipzone
 * Ver:     1.0
 */class RestorePrint{ // class start

    public $res = array();    protected $dict = array();    protected $buf = &#39;&#39;;    protected $keyname = &#39;&#39;;    protected $stack = array();    public function __construct() {
        $this->stack[] =& $this->res;
    }    public function __call($method, $param){
        echo $this->buf .&#39; not defined mehtod:&#39;.$method. &#39; param:&#39;.implode(&#39;,&#39;, $param);
    }    public function set($word, $value=&#39;&#39;){
        if(is_array($word)){            foreach($word as $k=>$v){                $this->set($k, $v);
            }
        }        $p =& $this->dict;        foreach(str_split($word) as $ch){            if(!isset($p[$ch])){                $p[$ch] = array();
            }            $p =& $p[$ch];
        }        $p[&#39;val&#39;] = $value;        return $this;
    }    public function parse($str){
        $this->doc = $str;        $this->len = strlen($str);        $i = 0;        while($i < $this->len){            $t = $this->find($this->dict, $i);            if($t){                $i = $t;                $this->buf = &#39;&#39;;
            }else{                $this->buf .= $this->doc{$i++};
            }
        }
    }    protected function find(&$p, $i){
        if($i >= $this->len){            return $i;
        }        $t = 0;        $n = $this->doc{$i};        if(isset($p[$n])){            $t = $this->find($p[$n], $i+1);
        }        if($t){            return $t;
        }        if(isset($p[&#39;val&#39;])){            $arr = explode(&#39;,&#39;, $p[&#39;val&#39;]);
            call_user_func_array(array($this, array_shift($arr)), $arr);            return $i;
        }        return $t;
    }    protected function group(){
        if(!$this->keyname){            return ;
        }        $cnt = count($this->stack)-1;        $this->stack[$cnt][$this->keyname] = array();        $this->stack[] =& $this->stack[$cnt][$this->keyname];        $this->keyname = &#39;&#39;;
    }    protected function brackets($c){
        $cnt = count($this->stack)-1;        switch($c){            case &#39;)&#39;:                if($this->keyname){                    $this->stack[$cnt][$this->keyname] = trim($this->buf);
                }                $this->keyname = &#39;&#39;;
                array_pop($this->stack);                break;            case &#39;[&#39;:                if($this->keyname){                    $this->stack[$cnt][$this->keyname] = trim($this->buf);
                }                break;            case &#39;]&#39;:                $this->keyname = $this->buf;                break;
        }        $this->buf = &#39;&#39;;
    }

} // class end?>
Copier après la connexion

demo.php

<?phprequire &#39;RestorePrint.class.php&#39;;$print_r_data = <<<TXT
Array
(
    [name] => fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
TXT;// 显示打印的数据echo &#39;显示打印的数据<br>&#39;;echo &#39;<pre class="brush:php;toolbar:false">&#39;.$print_r_data.&#39;
';$oRestorePrint = new RestorePrint;$oRestorePrint->set('Array', 'group');$oRestorePrint->set(' [', 'brackets,[');$oRestorePrint->set('] => ', 'brackets,]');$oRestorePrint->set(')', 'brackets,)');$oRestorePrint->parse($print_r_data);$result = $oRestorePrint->res;echo '还原为数组
'; var_dump($result);?>
Copier après la connexion

Sortie :

显示打印的数据Array(
    [name] => fdipzone
    [gender] => male
    [age] => 18
    [profession] => programmer
    [detail] => Array(
        [grade] => 1
        [addtime] => 2016-10-31
    )
)
还原为数组array (size=5)  &#39;name&#39; => string &#39;fdipzone&#39; (length=8)  &#39;gender&#39; => string &#39;male&#39; (length=4)  &#39;age&#39; => string &#39;18&#39; (length=2)  &#39;profession&#39; => string &#39;programmer&#39; (length=10)  &#39;detail&#39; => 
    array (size=2)      &#39;grade&#39; => string &#39;1&#39; (length=1)      &#39;addtime&#39; => string &#39;2016-10-31&#39; (length=10)
Copier après la connexion

Cet article explique comment php restaure les données traitées par print_r dans le tableau d'origine. Pour plus de contenu connexe, veuillez faire attention. vers le site Web chinois php.

Recommandations associées :

Comment déterminer si la connexion est disponible via PDO en php

Déterminer la page ou l'image via php Qu'il soit compressé gzip

Exemple HTML5 d'obtention de la position géographique actuelle et de son affichage sur la carte Baidu

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal