【问题标题】:Convert multidimensional array with key and value用键和值转换多维数组
【发布时间】:2016-06-09 18:41:27
【问题描述】:

我有这样的 PHP 数组:

Array
(
[11] => Array
    (
        [0] => foo
        [1] => bar
        [2] => hello
    )

[14] => Array
    (
        [0] => world
        [1] => love
    )

[22] => Array
    (
        [0] => stack
        [1] => overflow
        [2] => yep
        [3] => man
    )
 )

我想要的结果是:

array (
 'foo' => '11',
 'bar' => '11',
 'hello' => '11',
 'world' => '14',
 'love' => '14',
 'stack' => '22',
 'overflow' => '22',
 'yep' => '22',
 'man' => '22'
 )

foreach 中尝试了foreach,但仍然无法做到这一点。只有两个级别。

【问题讨论】:

  • 关于概念,你必须确保初始数组的值不同,以避免最后的键覆盖。
  • 你是放弃还是什么???

标签: php arrays codeigniter multidimensional-array


【解决方案1】:

您没有显示您的 foreach 尝试,但它相当简单:

foreach($array as $key => $val) {
    foreach($val as $v) {
        $result[$v] = $key;
    }
}

如果不能保证它们是数组,您可以将内部 foreach 包装在 if(in_array()) 中。此外,所有子数组值都必须是唯一的,否则您只会获得最后一个的键/值。

这是另一种方式:

$result = array();

foreach($array as $key => $val) {
    $result = array_merge($result,
                array_combine($val, array_fill(0, count($val), $key)));
}

使用内部数组的值作为键创建结果数组,并使用父数组键填充值。与之前的结果合并。

【讨论】:

    【解决方案2】:

    您可以使用如下所示的 FOREACH 循环轻松完成此操作。顺便说一下,你也可以测试一下HERE.

        <?php
    
            $arr        = [
                "11" =>["foo", "bar", "hello"],
                "14" =>["world", "love"],
                "22" =>["stack", "overflow", "yep", "man"],
            ];
    
            $arrFinal   = array();
            foreach($arr as $intKey=>$subArray){
                if(is_array($subArray)){
                    foreach($subArray as $ikey=>$value){
                        $arrFinal[$value] = $intKey;
                    }
                }
            }
            var_dump($arrFinal);
    

    VAR_DUMP 的结果

            array (size=9)
              'foo' => int 11
              'bar' => int 11
              'hello' => int 11
              'world' => int 14
              'love' => int 14
              'stack' => int 22
              'overflow' => int 22
              'yep' => int 22
              'man' => int 22
    

    【讨论】:

      猜你喜欢
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多