在 PHP 中,当需要将数组或对象的结构进行输出调试时,我们常常使用print_r函数将其转化为可读性更高的字符串,这些字符串包含了数组或对象的所有信息,比如键值、嵌套关系、数据类型等。不过,有时我们需要将这些字符串再次转化为数组或
在 PHP 中,当需要将数组或对象的结构进行输出调试时,我们常常使用print_r
函数将其转化为可读性更高的字符串,这些字符串包含了数组或对象的所有信息,比如键值、嵌套关系、数据类型等。不过,有时我们需要将这些字符串再次转化为数组或对象,以便进一步操作或分析,这就需要进行数据还原。
以下是print_r
处理后数据还原的解决方法:
使用eval函数进行数据还原
在 PHP 中,eval
函数可以执行一段包含 PHP 代码的字符串,并返回执行的结果。因此,我们可以通过将print_r
返回的字符串作为参数传递给eval
函数,从而还原出原始数组或对象。具体步骤如下:
- 使用
print_r
函数处理需要还原的数组或对象,并将其结果保存在字符串变量中,如下所示:
```php
$str = "Array
(
[foo] => bar
[baz] => Array
(
[0] => a
[1] => b
[2] => c
)
)";
```
- 使用字符串函数
addslashes
对字符串中的转义字符进行转义,避免在eval
函数执行时出错。
php
$str = addslashes($str);
- 将字符串中的
Array
、(
、)
等字符替换为对应的 PHP 代码,从而形成可执行的 PHP 代码字符串。
php
$str = str_replace(
['Array', '(', ')', "\n", "\r", "\t", '[', ']'],
['[]', '[', ']', '', '', '', 'array(', ')'],
$str
);
- 使用
eval
函数执行 PHP 代码字符串,并将结果保存到变量中。
php
eval("\$arr = $str;");
var_dump($arr);
上述代码通过eval
函数执行了原始数组的代码字符串,并将还原出的数组保存在了$arr
变量中。因此,我们可以通过var_dump
函数输出检查结果是否正确。
使用json_encode与json_decode函数进行数据还原
PHP 中的json_encode
函数可以将数组或对象转化为 JSON 数据格式的字符串,而json_decode
函数可以将 JSON 数据还原为原始数组或对象。因此,如果我们将print_r
函数返回的字符串先转化为 JSON 数据格式,再通过json_decode
函数还原为原始数组,便可以实现还原操作。
具体步骤如下:
- 使用
print_r
函数处理需要还原的数组或对象,并将其结果保存在字符串变量中,如下所示:
php
$str = "Array
(
[foo] => bar
[baz] => Array
(
[0] => a
[1] => b
[2] => c
)
)";
- 将字符串变量中的
\n
、\r
、\t
等特殊字符替换为空字符串,从而形成纯净的数组字符串。
php
$str = str_replace(["\n", "\r", "\t"], '', $str);
- 将字符串变量中的键名
[foo]
替换为"foo" =>
的形式,将键名加上引号,形成 JSON 格式的字符串。
php
$str = str_replace(
['[', ']'],
['{', '}'],
preg_replace('/(\[([^\[\]]*)\])/', '"$2":', $str, -1)
);
- 使用
json_decode
函数解析 JSON 数据,从而得到原始数组。
php
$arr = json_decode($str, true);
var_dump($arr);
上述代码通过json_decode
函数解析了原始数组的 JSON 表示,并将还原出的数组保存在了$arr
变量中。因此,我们可以通过var_dump
函数输出检查结果是否正确。
总结:
以上是使用eval
函数和json_encode/json_decode
函数实现 PHP 数组还原的完整攻略。无论是哪种方法,都可以实现 PHP 数组的还原操作,具体方法可以根据实际情况进行选择。
本文标题为:php将print_r处理后的数据还原为原始数组的解决方法


基础教程推荐
- Laravel5.1 框架响应基本用法实例分析 2023-03-18
- php中删除数组的第一个元素和最后一个元素的函数 2024-02-03
- PHP用反撇号执行外部命令 2024-02-09
- php 查找数组元素提高效率的方法详解 2023-12-25
- php实现字符串反转输出的方法 2024-01-03
- 如何使用Casbin作为ThinkPHP的权限控制中间件 2022-09-01
- php 实现svg转化png格式的方法分析 2023-03-18
- PHP实现的消息实时推送功能【基于反ajax推送】 2022-10-09
- ecshop添加菜单及权限分配问题 2022-10-02
- PHP 多进程与信号中断实现多任务常驻内存管理实例方法 2023-02-21