php - 如何将json字符串转换为php关联数组而没有0 =>在每个级别的顶部
问题描述
大家好,我有那些嵌套的 json 数据,在非常基本的层面上,它们看起来像这样
$json = '{
"destinazione": [
{
"corfu": [
{
"dataPartenza": [
{
"18/11/83": [
{
"sistemazione": [
{
"comfort": [
[
{
"2pax-studio": "€6"
}
]
]
}
]
}
]
}
]
}
]
}
]
}';
现在我想将这些数据发送到 php 服务器进行操作,我正在使用这段代码来显示数据
$jsonDecode = json_decode($json,TRUE);
print_r($jsonDecode);
我得到这个:
Array
(
[destinazione] => Array
(
[0] => Array
(
[corfu] => Array
(
[0] => Array
(
[dataPartenza] => Array
(
[0] => Array
(
[18/11/83] => Array
(
[0] => Array
(
[sistemazione] => Array
(
[0] => Array
(
[comfort] => Array
(
[0] => Array
(
[0] => Array
(
[2pax-studio] => €6
)
)
)
)
)
)
)
)
)
)
)
)
)
)
但我期待类似的事情,
Array
(
[destinazione] => Array
(
[corfu] => Array
(
[dataPartenza] => Array
(
[18/11/83] => Array
(
[sistemazione] => Array
(
[comfort] => Array
(
[2posti] => 6euro
)
)
)
)
)
)
)
所以我期待每个级别顶部没有 0 => 的关联数组,也许我的 json 方案是错误的,这就是为什么我得到意外结果的原因?我是 php 的菜鸟 .. 非常感谢
解决方案
理想情况下,您希望从源头解决这个问题,就像修复产生这种奇怪格式的东西一样。
否则,如果您需要对任意深度的数据结构执行操作,则需要递归。
$data = json_decode($json, true);
function ensmallen($input) {
if( is_array($input) ) {
// if it's a numerically-indexed array with exactly one key
if( array_keys($input) === [0] ) {
return ensmallen($input[0]);
} else {
foreach($input as $key => $value) {
$input[$key] = ensmallen($value);
}
}
}
return $input;
}
var_dump(ensmallen($data));
输出:
array(1) {
["destinazione"]=>
array(1) {
["corfu"]=>
array(1) {
["dataPartenza"]=>
array(1) {
["18/11/83"]=>
array(1) {
["sistemazione"]=>
array(1) {
["comfort"]=>
array(1) {
["2pax-studio"]=>
string(4) "€6"
}
}
}
}
}
}
}
不过要小心。如果这些索引数组中的任何一个曾经有多个条目,例如:多个目的地,这将破坏它之后的所有代码。因为它将$foo[1]['destinazione']
代替$foo['destinazione']
.
再一次,从数据源解决问题将是最好的行动方案。第二好的是按原样使用数据,而我刚刚发布的代码排在第三位。
推荐阅读
- javascript - 在 Rollup 中,创建 ESM 模块,除了 Flow 之外没有 babel 转译
- css - 触发移动设备/中屏元素“悬停”滚动效果
- node.js - XRPL 签名交易,卡在从密码中获取 xrpl 钱包
- react-native - Onclick按钮,状态不会改变
- r - 使用 readRDS() 从 Dropbox 链接加载 rds
- python - 如何根据 groupby() Pandas 中操作后的结果为每个组创建一组行?
- c++ - 我很难处理数组
- node.js - 无法使用 xml2js 节点包解析和转换大型 xml 文件
- java - 正则表达式 - 替换字符串中的特定换行符
- python - 正确读取日期/时间值