【问题标题】:Flip Multidimensional array翻转多维数组
【发布时间】:2016-11-16 23:22:51
【问题描述】:

我有一个这样的数组。

Array (
[0]=> array("a","b")
[1]=> array("c","d")
)

我想把它转换成

Array (
[a]=> "0",
[b]=>"0",
[C]=>"1",
[d]=>"1"
)

我怎样才能用更好的方法做到这一点?

【问题讨论】:

  • 比什么更好?向我们展示您的尝试。 - 另外,你不能在生成数组时这样做吗? - 只是为了确定,你想把多维数组变成一个平面数组对吗?
  • 嵌套数组中的每个值都成为一个键,并且应该将初始父键作为一个值,对吧?
  • 更好的方式,意味着快速的方式。是的,它应该是平面数组,但是翻转意味着旧数组键应该是新数组值,旧数组值应该是新数组键。
  • 你完全是 RomanPerekhrest

标签: php arrays associative-array flip


【解决方案1】:

最简单的方法是使用嵌套循环。

foreach($array as $k => $arr) {
   foreach($arr as $v) {
      $result[$v] = $k;
   }
}

输出:

Array
(
 [a] => 0
 [b] => 0
 [c] => 1
 [d] => 1
)

【讨论】:

  • 但是当数组很大时会花费很多。我们可以使用任何数组函数来得到这个结果吗?
【解决方案2】:

您可以简单地使用array_fill_keysarray_merge

<?php
$test = [0=> array("a","b"),1=> array("c","d")];
$retest = array();
foreach($test as $key=>&$value){
  $value = array_fill_keys($value, $key);
  $retest = array_merge($retest,$value);
}
print_r($retest);
?>

在这里查看:https://eval.in/604948

输出是:

    Array
(
    [a] => 0
    [b] => 0
    [c] => 1
    [d] => 1
)

【讨论】:

  • 您的 eval.in 链接没有为我加载。此外,代码在没有引用变量的情况下也能正常工作。
【解决方案3】:

使用array_valuesarray_fill_keysarray_merge 函数的简短解决方案:

$arr = [
  ['a','b'],
  ['c','d'],
  ['e','f'],
];

$flipped = [];
foreach ($arr as $k => $v) {
    $flipped = array_merge($flipped, array_fill_keys(array_values($v), $k));
}

print_r($flipped); 

输出:

Array
(
    [a] => 0
    [b] => 0
    [c] => 1
    [d] => 1
    [e] => 2
    [f] => 2
)

【讨论】:

  • $arr = [ ['a','b'], ['c','d'], ['e','f'], ];
  • @SunilPrajapati,我展示了一个扩展数组。你的数组是[ ['a','b'], ['c','d'] ];。它应该可以正常工作。有什么问题?
【解决方案4】:

这是一种函数式风格的方法:

代码:(Demo)

var_export(
    array_merge(
        ...array_map(
            'array_fill_keys',
            $arr,
            array_keys($arr)
        )
    )
);

这会将子数组中的值映射到父键,然后将多维结构展平为所需的平面关联结构。

此技术不会对array_merge() 进行迭代调用;它只在array_map() 完成迭代后调用一次array_merge()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 2020-01-21
    • 2017-12-24
    • 1970-01-01
    • 2017-04-16
    • 2012-01-15
    • 1970-01-01
    相关资源
    最近更新 更多