php之file_put_contents写入json数据的一个细节问题
本来想把如下的数据
$params = json_decode($data, true);
通过:
file_put_contents("./1.txt", $params;
写入到:
./1.txt
但是,我查看./1.txt 的时候,发现之后值没有key,这样很难看出这个json数据的格式
解决方案:
通过var_export处理一下,可以成功写入带key的json数据
file_put_contents("./1.txt", var_export($params, true));
关于var_export有个重要的特性:
var_export() 是“可复原输出”,它会把变量导出成一个 合法的 PHP 表达式,也就是说: 把输出 copy 回 PHP eval(),它能重新变回原来的变量。
$newArr = eval('return ' . $exported . ';'); //现在 $newArr 又变为原来的数组。
print_r()和var_export()区别
print_r() 和 var_export() 有明显区别,尤其是在 赋值给变量 和 可复原性 上。我们对比一下:
1️⃣ 基本用法
$arr = ['a' => 1, 'b' => [2, 3]];
$output = print_r($arr, true);
$output是一个 字符串,内容类似:
Array
(
[a] => 1
[b] => Array
(
[0] => 2
[1] => 3
)
)
- 注意:这个字符串只是为了 人类可读,不能直接
eval()变回数组。 - 如果你尝试:
$newArr = eval('return ' . $output . ';');
会报错,因为 print_r 的格式不是合法的 PHP 代码。
2️⃣ 对比 var_export
| 函数 | 输出类型 | 可复原 | 用途 |
|---|---|---|---|
var_export($arr, true) | 字符串(合法 PHP 代码) | ✔ 可以 eval() 还原 | 保存、写文件、配置 |
print_r($arr, true) | 字符串(可读,但非 PHP 代码) | ✖ 不可直接复原 | 调试、打印日志 |
var_dump($arr) | 直接输出(带类型信息) | ✖ 不可复原 | 调试、查看类型 |
3️⃣ 总结
print_r($arr, true)→ 只是漂亮打印,适合写日志或文件查看,但不能直接当作数组再用。var_export($arr, true)→ 可复原字符串,写入文件后可以通过eval()或include变回原数组。
