首页 > 解决方案 > 如何将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 的菜鸟 .. 非常感谢

标签: phpjson

解决方案


理想情况下,您希望从源头解决这个问题,就像修复产生这种奇怪格式的东西一样。

否则,如果您需要对任意深度的数据结构执行操作,则需要递归。

$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'].

再一次,从数据解决问题将是最好的行动方案。第二好的是按原样使用数据,而我刚刚发布的代码排在第三位。


推荐阅读