【问题标题】:Create associative array from three flat arrays从三个平面数组创建关联数组
【发布时间】:2016-07-25 14:24:04
【问题描述】:

考虑以下几点:

    $a = array('Q1', 'Q2', 'Q3', 'Q4');
    $b = array('2014' => '101', '2014' => '102', '2014' => '103', '2014' => '104');
    $c = array('2015' => '101', '2015' => '102', '2015' => '103', '2015' => '104');

如何将这 3 个数组转换成这样的一个:

    array(
        'Q1' => array(
            '2014' => '101',
            '2015' => '101'
        ),
        'Q2' => array(
            '2014' => '102',
            '2015' => '102'
        ),
        'Q3' => array(
            '2014' => '103',
            '2015' => '103'
        ),
        'Q4' => array(
            '2014' => '104',
            '2015' => '104'
        )
    );

我无法正确合并 $b$c,而我可以使用 array_combine$a 来保持上述所需的结构。

对于代码中的array() 感到抱歉,我正在处理旧版应用程序。

【问题讨论】:

  • 你的 $b$c 数组不会像那样用得太多 - 你不能在 PHP 数组中有重复的键。
  • @user2094178,你能用有效的输入数组编辑你的问题吗?
  • @RomanPerekhrest 抱歉,这是个愚蠢的问题。

标签: php arrays multidimensional-array associative-array


【解决方案1】:

首先,您有重复的数组键,在这种情况下,最后一个键将覆盖前面的键。在这里,任意假设键具有唯一的后缀,以促进您想要的合并。

<?php

    $a = array('Q1', 'Q2', 'Q3', 'Q4');
    $b = array('2014' => '101', '2014_2' => '102', '2014_3' => '103', '2014_4' => '104');
    $c = array('2015' => '101', '2015_2' => '102', '2015_3' => '103', '2015_4' => '104');

    function mergeArraysAssociative($arrKeys, $array1, $array2) {
        $merged = array();
        foreach ($arrKeys as $key => $val) {
            $arrKeys1   = array_keys($array1);
            $arrKeys2   = array_keys($array2);

            $arrValues1 = array_values($array1);
            $arrValues2 = array_values($array2);

            $merged[$val][$arrKeys1[$key]] = $arrValues1[$key];
            $merged[$val][$arrKeys2[$key]] = $arrValues2[$key];

        }

        return $merged;
    }

    var_dump(mergeArraysAssociative($a, $b, $c));

?>
上面的 var_dump() 产生类似于下面所示的内容。而且,您可以quick test it here
array (size=4)
  'Q1' => 
    array (size=2)
      2014 => string '101' (length=3)
      2015 => string '101' (length=3)
  'Q2' => 
    array (size=2)
      '2014_2' => string '102' (length=3)
      '2015_2' => string '102' (length=3)
  'Q3' => 
    array (size=2)
      '2014_3' => string '103' (length=3)
      '2015_3' => string '103' (length=3)
  'Q4' => 
    array (size=2)
      '2014_4' => string '104' (length=3)
      '2015_4' => string '104' (length=3)

【讨论】:

    【解决方案2】:

    这应该可以工作

    <?php
        $d = array();
        for($i=0; $i<count($a), $++){
            $d[$a[$i]][] = $b[$i];
            $d[$a[$i]][] = $c[$i];
        }
        print_r($d)
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-11
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多