关于php:在每行中按索引合并2个数组

Merge 2 arrays by their index in each row

我有两个数组,每一个数组总是有相同的行数和每行的值数。

我需要将两个数组合并在一起,以合并每行的结果,但以一种特殊的方式(每个数组中每行也只有3个结果):

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

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

数组1:

1
2
3
4
5
6
7
8
9
10
11
12
13
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:

1
2
3
4
5
6
7
8
9
10
11
12
13
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 [?]
]

预期组合阵列格式:

1
2
3
4
5
6
7
8
9
10
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 [?] ...

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

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

返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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 [?]
]

我不确定为什么我的循环不只是将每一行的三个值相加-但是我认为它们的顺序仍然不正确,但是我不确定如何处理这个问题。

非常感谢。


如果我正确理解您的问题,这是"不成熟"(但保存)的解决方案-所有键都会根据需要保留一组:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$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()的交替顺序(zip顺序))。.

1
2
3
4
5
6
7
8
9
10
11
    $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]);
    }


我会这样做:

1
2
3
4
5
6
7
8
$combined = array();
foreach($array1 as $key => $value){
    $combined[$key] = array();
    foreach($value as $key2 => $value2){
        $combined[$key][] = $value2;
        $combined[$key][] = $array2[$key][$key2];
    }
}

对于数量可变的记录。