龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 将php数组还原成php源代码

时间:2014-12-03 11:19来源:网络整理 作者:网络 点击:
分享到:
将php数组还原成php源代码 说明:本程序将用于php代码中的数组调试,由于工作原因,经常要将php数组json化后传给客户端javascript,但是这些php数组是否符合格式的json字符串。往往数组传

说明:本程序将用于php代码中的数组调试,由于工作原因,经常要将php数组json化后传给客户端javascript,但是这些php数组是否符合格式的jso n字符串。往往数组传递过去了,但是前台没按要求显示出来。很可能是json_encode($arr)中的$arr格式不对,这时候用var_dump($arr) 打印出来的不是php代码的数组,于是自己写了这个功能,用于将php数组还原成php源码,这样就方便复制后修改,调试了。

#!/usr/bin/php -a
<?php
    //说明:本程序将用于php代码中的数组调试,由于工作原因,经常要将php数组json化后传给客户端javascript,但是这些php数组是否是
    //符合格式的json字符串。往往数组传递过去了,但是前台没按要求显示出来。很可能是json_encode($arr)中的$arr格式不对,这时候用
    //var_dump($arr)打印出来的不是php代码的数组,于是自己写了这个功能,用于将php数组还原成php源码,这样就方便复制后修改,调试了。

    //--------------------array to code---------------------------start
    //四个函数
    //function is_assoc_array($array);判断是否是关联数组
    //function array_index_code(); 返回索引字符串源码
    //function array_assoc_code(); 返回关联字符串源码
    function is_assoc_array($array){ return array_keys($array) !== range(0, count($array) - 1);}

    /*打印如下字符串[索引数组源码]:
        array(
            "111",
            '222',
            "333",
        )
    */
    function array_index_code($arr,$tab){
        $code = str_repeat("\\t",$tab). "array(\\n";
        if( $arr ){
            foreach( $arr AS $v){
                if(is_int($v)){
                    $code .= str_repeat("\\t",$tab). "$v,\\n";
                }elseif(is_array($v)){
                    $code .= array_code($v,$tab); //递归调用.索引数组不需要用tab+2
                }else{
                    $code .= str_repeat("\\t",$tab). "'$v',\\n";
                }
            }

        }
        $code .= str_repeat("\\t",$tab). "),\\n"; //尾部有逗号
        return $code;
    }

    /*打印如下字符串[关联数组源码]:
        array(
            "aaa"=>"111",
            "bbb"=>'222',
            "ccc'=> array(

                    ),
        )
    */
    function array_assoc_code($arr,$tab){
        $code = str_repeat("\\t",$tab). "array(\\n";
        if( $arr ){
            foreach( $arr AS $k=>$v){
                if(is_int($v)){
                    $code .= str_repeat("\\t",$tab). "'$k'=>$v,\\n";
                }elseif(is_array($v)){
                    $code .= str_repeat("\\t",$tab). "'$k'=>\\n". array_code($v,$tab+2); //递归调用,关联数组需要用tab+2
                }else{
                    $code .= str_repeat("\\t",$tab). "'$k'=>'$v',\\n";
                }
            }

        }
        $code .= str_repeat("\\t",$tab). "),\\n"; //尾部有逗号
        return $code;
    }

    /*
        打印数组,打印成php代码
    */
    function array_code($arr,$tab=0){
        if(is_assoc_array($arr)){
            return array_assoc_code($arr,$tab);
        }else{
            return array_index_code($arr,$tab);
        }
    }

    //--------------------array to code---------------------------end

    //测试例子
    $arrTEST = array(
        "aaa"=>"111",
        "bbb"=> array(
                1,
                3,
                array(
                    "wu"=>1,
                    "jun"=>2,
                    "jie"=>array(
                        "aaa"=>"bbb",
                        "ccc"=>"ddd",
                    ),
                )
                ),
    );
    //var_dump($arrTEST);die;
    echo array_code($arrTEST);

?>
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接