在每行中按索引合并2个数组

时间:2017-04-25 17:34:58

标签: php arrays for-loop foreach

我有2个数组,每个数组的行数和行数始终相同。

我需要将两个数组合并在一起,以便在每一行上合并结果,但是以特定方式(每个数组上每行总是只有3个结果):

例如,对于每一行,取每个数组的第一个结果,然后将它们放在一起,然后将每个数组的第二个结果放在一起,然后将它们放在一起,最后是第三个。

因此,数组1的值始终位于数组2的值之前(示例如下所示):

数组1:

array:7 [▼
  24 => array:3 [▼
    0 => 0
    1 => 0.66666666666667
    2 => 0.66666666666667
  ]
  25 => array:3 [▶]
  26 => array:3 [▶]
  27 => array:3 [▶]
  29 => array:3 [▶]
  30 => array:3 [▶]
  31 => array:3 [▶]
]

数组2:

array:7 [▼
  24 => array:3 [▼
    0 => 0.375
    1 => 0.42857142857143
    2 => 0.55555555555556
  ]
  25 => array:3 [▶]
  26 => array:3 [▶]
  27 => array:3 [▶]
  29 => array:3 [▶]
  30 => array:3 [▶]
  31 => array:3 [▶]
]

预期的组合数组格式:

array:7 [▼
  24 => array:6 [▼
    0 => 0
    1 => 0.375
    2 => 0.66666666666667
    3 => 0.42857142857143
    4 => 0.66666666666667
    5 => 0.55555555555556
  ]
  25 => array:6 [▶] ...

返回错误布局的当前循环:

$results = array();
foreach ($questionDetails as $key => $question) {
    for ($i = 0; $i < 3; $i++) {
            $results[$key][] = $array1[$key] + $array2[$key];
    }
}

返回:

array:7 [▼
  24 => array:3 [▼
    0 => array:3 [▼
      0 => 0
      1 => 0.66666666666667
      2 => 0.66666666666667
    ]
    1 => array:3 [▼
      0 => 0
      1 => 0.66666666666667
      2 => 0.66666666666667
    ]
    2 => array:3 [▼
      0 => 0
      1 => 0.66666666666667
      2 => 0.66666666666667
    ]
  ]
  25 => array:3 [▶]
  26 => array:3 [▶]
  27 => array:3 [▶]
  29 => array:3 [▶]
  30 => array:3 [▶]
  31 => array:3 [▶]
]

我不确定为什么我的循环不只是将每一行中的三个值加在一起 ​​- 但我认为它们仍然不是正确的顺序,但我不确定如何处理它。 / p>

非常感谢。

2 个答案:

答案 0 :(得分:0)

我会这样做:

$combined = array();
foreach($array1 as $key => $value){
    $combined[$key] = array();
    foreach($value as $key2 => $value2){
        $combined[$key][] = $value2;
        $combined[$key][] = $array2[$key][$key2];
    }
}

对于可变数量的记录。

答案 1 :(得分:0)

这是&#34;不公平&#34; (但保存)解决方案,如果我正确理解你的问题 - 所有的键都保留了一个集合:

$array1;
$array2;

$results = array();
foreach ($questionDetails as $key => $question1) {
    $question2 = $array2[$key];
    $tp = array();
    $tp[0] = $question1[0];
    $tp[1] = $question2[0];
    $tp[2] = $question1[1];
    $tp[3] = $question2[1];
    $tp[4] = $question1[2];
    $tp[5] = $question2[2];
    $results[$key] = $tp;
}

编辑:有一种更灵活的方式来实现这一点,其中参数的数量可能会有所不同(参见PHP: array_merge() in alternate order (zip order)?)。

    $array1;
    $array2;

    function array_zip(...$arrays) {
        return array_merge(...array_map(null, ...$arrays));
    }

    $results = array();
    foreach ($questionDetails as $key => $question1) {
        $results[$key] = array_zip($question1,$array2[$key]);
    }