📜  在 php 中解析 json 嵌套数组表单 url(1)

📅  最后修改于: 2023-12-03 15:37:26.149000             🧑  作者: Mango

在 PHP 中解析 JSON 嵌套数组并从表单 URL 中获取数据

JSON(JavaScript 对象表示法)是一种常用的轻量级数据交换格式,常用于前后端传输数据。而在 PHP 中处理 JSON 可以借助内置函数 json_decode()

然而,当 JSON 中嵌套了数组,我们便需要深层解析手段。本文将重点介绍如何解析 JSON 中的嵌套数组并从表单 URL 中获取数据。

解析 JSON 中的嵌套数组

假设我们有一个 JSON 字符串,其中有个嵌套数组:

{
  "name": "Tom",
  "age": 21,
  "languages": [
    "JavaScript",
    "PHP",
    "Python"
  ]
}

如果要读取这个数组,那么可以在调用 json_decode() 时传入第二个参数为 true。这样返回的数据将会是关联数组:

$json = '{"name":"Tom","age":21,"languages":["JavaScript","PHP","Python"]}';
$data = json_decode($json, true);
print_r($data['languages']);
// 输出结果为:Array ( [0] => JavaScript [1] => PHP [2] => Python )

如果想要获得枚举数组,则可在访问时添加下标:

$json = '{"name":"Tom","age":21,"languages":["JavaScript","PHP","Python"]}';
$data = json_decode($json);
print_r($data->languages[0]);
// 输出结果为:JavaScript
表单 URL 解析

当在表单中用 POST 方式提交数据时,如果希望在 URL 中看到提交的数据,可以使用 http_build_query() 函数把关联数组转换为 URL 参数的格式:

<form action="post.php" method="post">
  <input type="text" name="name" value="Tom">
  <input type="text" name="age" value="21">
  <input type="text" name="languages[]" value="JavaScript">
  <input type="text" name="languages[]" value="PHP">
  <input type="text" name="languages[]" value="Python">
  <input type="submit" value="提交">
</form>
// post.php
$data = $_POST;
$urlParams = http_build_query($data);
echo $urlParams;
// 输出结果为:name=Tom&age=21&languages%5B%5D=JavaScript&languages%5B%5D=PHP&languages%5B%5D=Python

需要注意的是,http_build_query() 函数默认使用 & 作为参数分隔符,因此如果参数值中含有 &,则需要使用 urlencode() 函数对参数值进行编码。

特别的,如果是嵌套数组,则需要在参数名后加上 [],表示这是一个数组,这样在提交表单时会自动转换为数组:

<input type="text" name="languages[]" value="JavaScript">
<input type="text" name="languages[]" value="PHP">
<input type="text" name="languages[]" value="Python">

最后,在 PHP 中可以使用 parse_str() 函数解析 URL 参数的字符串为关联数组。为了使嵌套数组正确解析,需要在参数名后加上 []

$urlParams = 'name=Tom&age=21&languages%5B%5D=JavaScript&languages%5B%5D=PHP&languages%5B%5D=Python';
parse_str($urlParams, $data);
print_r($data);
// 输出结果为:Array ( [name] => Tom [age] => 21 [languages] => Array ( [0] => JavaScript [1] => PHP [2] => Python ) )
总结

本文介绍了如何在 PHP 中解析 JSON 中的嵌套数组,以及如何从表单 URL 中获取数据。同时也提醒了在表单中使用嵌套数组时需要在参数名后加上 [],以避免深层解析的问题。