【问题标题】:How to convert a multidimensional array to a single dimensional array?如何将多维数组转换为一维数组?
【发布时间】:2011-08-24 03:59:03
【问题描述】:

我想(在 PHP 中)转成类似

(["a"] => (
    ["x"] => "foo",
    ["y"] => "bar"),
["b"] => "moo",
["c"] => (
    ["w"] => (
        ["z"] => "cow" )
        )
)

进入

(["a.x"] => "foo",
["a.y"] => "bar",
["b"] => "moo",
["c.w.z"] => "cow")

我如何做到这一点?

【问题讨论】:

  • 是只有3层深还是任意层深?
  • 它的深度是任意的,尽管它很少超过 4 层。

标签: php arrays multidimensional-array


【解决方案1】:

你可以创建一个递归函数:

function flatten($arr, &$out, $prefix='') {
    $prefix = $prefix ? $prefix . '.' : '';
    foreach($arr as $k => $value) {
        $key =  $prefix . $k;
        if(is_array($value)) {
            flatten($value, $out, $key);
        }
        else {
            $out[$key] = $value;
        }
    }
}

你可以把它当作

$out = array();
flatten($array, $out);

【讨论】:

  • 如何将完整的数组路径存储为对象标识符?
  • @Cobra:我不明白你的意思。请详细说明。
  • Nvm,我现在明白了。谢谢!
  • $key = $prefix ? $前缀。 '。' . $k : $k;它实际上已经用这一行存储了完整的数组路径。对此解决方案 +1。
【解决方案2】:

这里有一些不错的东西:http://davidwalsh.name/flatten-nested-arrays-php

【讨论】:

  • 在正确的轨道上,但它本身不会像 OP 想要的那样制作钥匙
猜你喜欢
  • 2019-04-03
  • 2023-03-26
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-06-09
相关资源
最近更新 更多