如何将 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']

同样,在数据源处解决问题将是最好的做法。第二个最好的是按原样使用数据,而我刚刚发布的代码远远排在第三位。

最新更新