将数组转换成数组样式的字符串

将数组转换成数组样式的字符串

class Test{
    public function index(){
        $arrConfig = Array(
            'name' => 'daicr',
            'age' => 24,
            'host' => '127.0.0.1',
            'port' => 80,
        );
        $str = $this -> getcachevars(array("config_im_api" => $arrConfig),'ARRAY');
        var_dump($str);
    }
/** * @purpose : 字符串处理函数;1、将数组(可以是多维数组)转换成数组样式的字符串;2、将字符串定义为一个常量 * @author : daicr * @param : 如果传递的$data是数组,则$type传入ARRAY * @param : 如果传递的$data是字符串,则$type传入STRING * @return : string $evaluate 返回一个处理好的字符串,' 和 \ 会在前面加一个 \ **/ function getcachevars($data, $type = 'STRING') { $evaluate = ''; foreach($data as $key => $val) { if(is_array($val)) { $evaluate .= "\$$key = ".$this->arrayeval($val).";\n"; } else { $val = addcslashes($val, '\'\\'); $evaluate .= $type == 'ARRAY' ? "\$$key = '$val';\n" : "define('".strtoupper($key)."', '$val');\n"; } } return $evaluate; } function arrayeval($array, $level = 0) { $space = ''; for($i = 0; $i <= $level; $i++) { $space .= "\t"; } $evaluate = "Array\n$space(\n"; $comma = $space; foreach($array as $key => $val) { $key = is_string($key) ? '\''.addcslashes($key, '\'\\').'\'' : $key; // 将 key 加上一个 '' if (!is_array($val) && (!preg_match("/^\-?\d+$/", $val) || strlen($val) > 12)) { // /^\-?\d+$/ 匹配数字 或者以 - 开头的数字 $val = '\''.addcslashes($val, '\'\\').'\''; } else { if ('\'postcode\'' === $key) { //邮编必须得保存为字符串型 $val = '\''.addcslashes($val, '\'\\').'\''; } } if(is_array($val)) { $evaluate .= "$comma$key => ".arrayeval($val, $level + 1); // 多维数组递归调用 } else { $evaluate .= "$comma$key => $val"; } $comma = ",\n$space"; } $evaluate .= "\n$space)"; return $evaluate; } } $test = new Test(); $test -> index();

2018-02-24

posted @ 2018-02-24 14:31  Chrdai  阅读(971)  评论(0编辑  收藏  举报