将字符串分解为多维数组

时间:2016-08-29 14:27:35

标签: php

我想基于密钥将数组爆炸到另一个数组。

例如:

[
  {
    "key": "menu.company.footer",
    "content": "this is an example"
  },
  {
    "key": "menu.company.home.foo",
    "content": "bar"
  }
]

会变成:

[
  {
    "menu": 
    {
      "company": 
      {
        "footer": "this is an example"
      }
    }
  },
  {
    "menu": 
    {
      "company": 
      {
        "home": 
        {
          "foo": "bar"
        }
      }
    }
  }
]

这就是我所做的:

  1. 通过我的数组
  2. 完成foreach
  3. 爆炸键
  4. 用爆炸计数完成了一次。
  5. 我的问题是如何动态创建父/子系统,因为我不知道会有多少级别。

1 个答案:

答案 0 :(得分:2)

这是一个经常出现的问题。这有效:

foreach($array as $k => $v) {
    $temp  = &$result[$k];
    $path  = explode('.', $v['key']);

    foreach($path as $key) {
        $temp = &$temp[$key];
    }
    $temp = $v['content'];
}
print_r($result);

使用引用&,您可以将$temp变量设置为每次更深层次的嵌套元素,只需添加到$temp即可。

  • 循环遍历数组并展开每个key元素
  • 循环显示爆炸值并使用键创建一个数组,随时嵌套
  • 最后,将多维数组的值设置为content元素

另请参阅How to write getter/setter to access multi-level array by key names?了解可能具有适应性的内容。