2017-04-25 104 views
0

我有2個數組,每個數組每行總是具有相同的行數和相同數量的值。通過它們在每一行中的索引合併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 [▶] 
] 

我不確定爲什麼我的循環不只是增加了三個值從每一行開始 - 但是我認爲他們仍然沒有按照正確的順序排列,但我不確定如何解決這個問題。

非常感謝。

+0

的可能的複製[PHP一個陣列追加到另一個(未陣列\ _push或+)](http://stackoverflow.com/questions/4268871/php-append-one-array-to-another- not-array-push-or) – Dez

回答

0

這是「unfancy」(但保存)解決方案,我正確地理解你的問題 - 所有的密鑰將被保留一種根據需要設置:

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

謝謝@Blackbam,這個工作很完美。很容易理解! – Ben

0

我這樣做:

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

對於記錄的可變數目。如果

相關問題