将print_r打印出的数组字符串还原为PHP数组

我们平时在写日志时会使用数组格式化输出为数组形式的字符串,这样浏览起来非常直观,但在有些情况下,我们需要将数组字符串进行还原,今天在网上查了很多资料后并不能完美进行还原,我就自己尝试多次后,写了一个方法专门进入处理数组字符串还原为数组。


打印在日志中原数组格式如图:

image.png


我在测试时用postman,选用post试提交数组字符串数据,数据类型选择了raw,如下图

image.png


我封装的处理数据的方法:

/**
    * 将print_r打印出的数组字符串还原为数组 
    * @desc: 函数用途描述信息
    * @author: Sindsun
    * @email: admin@sindsun.com
    * @date: 2020年5月20日 下午2:39:12
    * @param: $arrayText  由print_r输出的数组字符串
    * @return array
    */
    public function restorePrintrTextToArray($arrayText){
        if(!is_string($arrayText)){
            return [];
        }
        $arrayText = str_replace('[', '\'', $arrayText);
        $arrayText = str_replace(']', '\'', $arrayText);
        $input = explode("\n", $arrayText);
        foreach ($input as $k=>$v){
            if(empty($v) || strpos($v, 'Array')!==false || strpos($v, '(')!==false || strpos($v, ')')!==false){
                continue;
            }
            $tmpValArr = explode('=>', $v);
            if(count($tmpValArr) == 2){
                $input[$k] = $tmpValArr[0] . '=> \'' .trim($tmpValArr[1]) . '\',';
            }
        }
        $input = implode("\n", $input);
        $input = str_replace(')', '),', $input);
        $input = str_replace('Array', 'array', $input);
        $input = substr($input, 0, strlen($input)-1);
        eval("\$input=".$input.";");
        
        return $input;
    }


接收数据,测试

header("Content-Type: application/json; charset=utf-8");
$recvData = file_get_contents('php://input');
var_dump(is_array($recvData));
echo PHP_EOL;
$recvData = $this->restorePrintrTextToArray($recvData);
var_dump(is_array($recvData));
echo PHP_EOL;
print_r($recvData); die;


查看结果

image.png

版权声明: 此文为本站源创文章[或由本站编辑从网络整理改编],
转载请备注出处:
[狂码一生] https://www.sindsun.com/articles/8/130
[若此文确切存在侵权,请联系本站管理员进行删除!]


--THE END--