PHP 中如何将数组编码为 JSON 数组而不是 JSON 对象
在 PHP 中处理 JSON 数据时,有时会遇到需要将数组编码为 JSON 数组而不是 JSON 对象的情况。默认情况下,如果使用 json_encode
函数对关联数组进行编码,它会生成一个 JSON 对象;而对索引数组进行编码,则会生成一个 JSON 数组。
什么是关联数组和索引数组
-
索引数组:数组的键是连续的整数。例如:
$indexedArray = [1, 2, 3, 4];
-
关联数组:数组的键是非连续的整数或字符串。例如:
$associativeArray = ["name" => "Alice", "age" => 25];
默认行为
使用 json_encode
对索引数组进行编码时,会生成一个 JSON 数组:
$indexedArray = [1, 2, 3, 4];
$jsonArray = json_encode($indexedArray);
echo $jsonArray; // 输出: [1,2,3,4]
使用 json_encode
对关联数组进行编码时,会生成一个 JSON 对象:
$associativeArray = ["name" => "Alice", "age" => 25];
$jsonObject = json_encode($associativeArray);
echo $jsonObject; // 输出: {"name":"Alice","age":25}
将关联数组编码为 JSON 数组
如果需要将关联数组编码为 JSON 数组,可以先将关联数组转换为索引数组。有几种方法可以实现这一点:
方法一:使用 array_values
函数
array_values
函数会返回一个包含数组中所有值的新的索引数组。
$associativeArray = ["name" => "Alice", "age" => 25];
$indexedArray = array_values($associativeArray);
$jsonArray = json_encode($indexedArray);
echo $jsonArray; // 输出: ["Alice",25]
方法二:手动重新索引
可以通过遍历关联数组并重新赋值给一个新的索引数组来实现。
$associativeArray = ["name" => "Alice", "age" => 25];
$newIndexedArray = [];
foreach ($associativeArray as $value) {
$newIndexedArray[] = $value;
}
$jsonArray = json_encode($newIndexedArray);
echo $jsonArray; // 输出: ["Alice",25]
方法三:使用 array_map
函数
array_map
函数可以用来对数组中的每个元素应用回调函数,从而生成一个新的索引数组。
$associativeArray = ["name" => "Alice", "age" => 25];
$newIndexedArray = array_map(function($value) {
return $value;
}, $associativeArray);
$jsonArray = json_encode($newIndexedArray);
echo $jsonArray; // 输出: ["Alice",25]
总结
在 PHP 中,json_encode
函数默认会根据数组的类型生成相应的 JSON 格式。如果需要将关联数组编码为 JSON 数组,可以通过将关联数组转换为索引来实现。以上方法都可以轻松地将关联数组转换为索引数组,并最终编码为 JSON 数组。