指尖上的记忆指尖上的记忆
Home
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub
Home
  • 基础
  • Laravel框架
  • Symfony框架
  • 基础
  • Gin框架
  • 基础
  • Spring框架
  • 命令
  • Nginx
  • Ai
  • Deploy
  • Docker
  • K8s
  • Micro
  • RabbitMQ
  • Mysql
  • PostgreSsql
  • Redis
  • MongoDb
  • Html
  • Js
  • 前端
  • 后端
  • Git
  • 知识扫盲
  • Golang
🌟 gitHub

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 变回原数组。