【问题标题】:Merge 2 arrays by their index in each row按每行中的索引合并 2 个数组
【发布时间】:2017-04-25 17:34:57
【问题描述】:

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

我需要将 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 [▶]
]

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

非常感谢。

【问题讨论】:

标签: php arrays for-loop foreach


【解决方案1】:

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

$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]);
    }

【讨论】:

  • 谢谢@Blackbam,这非常有效。也很容易理解!
【解决方案2】:

我会这样做:

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

对于可变数量的记录。

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2012-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-29
    相关资源
    最近更新 更多