📅  最后修改于: 2023-12-03 15:37:26.149000             🧑  作者: Mango
JSON(JavaScript 对象表示法)是一种常用的轻量级数据交换格式,常用于前后端传输数据。而在 PHP 中处理 JSON 可以借助内置函数 json_decode()
。
然而,当 JSON 中嵌套了数组,我们便需要深层解析手段。本文将重点介绍如何解析 JSON 中的嵌套数组并从表单 URL 中获取数据。
假设我们有一个 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
当在表单中用 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 中获取数据。同时也提醒了在表单中使用嵌套数组时需要在参数名后加上 []
,以避免深层解析的问题。