2017-02-17 124 views
0

我想從數組2中彈出並想要在數組1中推送。 但是根據一些自定義的要求。從一個關聯數組彈出並推送到另一個數組

現在陣列1有一日關鍵的readingOrder爲1和2鍵的readingOrder是4

所以我想從所有其他數組2的前兩個key.And同樣的過程這兩個關鍵之間推。

和我最後的數組必須像array3。

例如在array1 key [0] readingOrder是1和key [1]的4.現在我想從array2推另一個兩個鍵。 爲ARRAY1鍵[2]讀出順序爲6。所以這個鍵之前,我要推從數組2和相同的用於進一步另一個關鍵...

ARRAY1是像下面

Array 
(
    [0] => Array 
     (
      [readingOrder] => 1 
      [id] => 78 
     ) 

    [1] => Array 
     (
      [readingOrder] => 4 
      [id] => 76 
     ) 

    [2] => Array 
     (
      [readingOrder] => 6 
      [id] => 80 
     ) 

) 

數組2是像下面

Array 
(
    [0] => Array 
     (
      [id] => 81 
      [readingOrder] => 2 
     ) 

    [1] => Array 
     (
      [id] => 82 
      [readingOrder] => 5 
     ) 

    [2] => Array 
     (
      [id] => 84 
      [readingOrder] => 7 
     ) 

    [3] => Array 
     (
      [id] => 85 
      [readingOrder] => 8 
     ) 

    [4] => Array 
     (
      [id] => 86 
      [readingOrder] => 9 
     ) 

    [5] => Array 
     (
      [id] => 87 
      [readingOrder] => 10 
     ) 

    [6] => Array 
     (
      [id] => 88 
      [readingOrder] => 11 
     ) 

) 

輸出ARRAY3:

Array 
(
    [0] => Array 
     (
      [readingOrder] => 1 
      [id] => 78 
     ) 

    [1] => Array 
     (
      [id] => 81 
      [readingOrder] => 2 
     ) 

    [2] => Array 
     (
      [id] => 82 
      [readingOrder] => 5 
     ) 

    [3] => Array 
     (
      [readingOrder] => 4 
      [id] => 76 
     ) 

    [4] => Array 
     (
      [id] => 84 
      [readingOrder] => 7 
     ) 

    [5] => Array 
     (
      [readingOrder] => 6 
      [id] => 80 
     ) 

    [6] => Array 
     (
      [id] => 85 
      [readingOrder] => 8 
     ) 

    [7] => Array 
     (
      [id] => 86 
      [readingOrder] => 9 
     ) 

    [8] => Array 
     (
      [id] => 87 
      [readingOrder] => 10 
     ) 

    [9] => Array 
     (
      [id] => 88 
      [readingOrder] => 11 
     ) 

) 

謝謝..

+1

你以前曾試圖獲得正確輸出的樣子是什麼樣的?更確切地說,你想要解決什麼問題? – GordonM

+0

@GordonM我編輯我的問題。請現在閱讀。 –

+1

你不明白@GordonM問的是什麼,問題是:爲什麼你需要這樣做? (也*你能顯示你的嘗試來解決問題嗎?*) –

回答

0

你可以用usort做到這一點。首先,你需要合併數組:

$a1 = [ 
    [ 
     'readingOrder' => 1, 
     'id' => 78 
    ], 
    [ 
     'readingOrder' => 4, 
     'id' => 76 
    ], 
    [ 
     'readingOrder' => 6, 
     'id' => 80 
    ] 
]; 
$a2 = [ 
    [ 
     'readingOrder' => 2, 
     'id' => 81 
    ], 
    [ 
     'readingOrder' => 5, 
     'id' => 82 
    ], 
    [ 
     'readingOrder' => 7, 
     'id' => 84 
    ], 
    [ 
     'readingOrder' => 8, 
     'id' => 85 
    ] 
]; 

$a3 = array_merge($a1, $a2); 

然後,你需要使用usort

usort($a3, function($a,$b) { 
    if ($a['readingOrder'] == $b['readingOrder']) return 0; 
    return $a['readingOrder'] < $b['readingOrder'] ? -1 : 1; 
}); 

在PHP 7,你現在可以使用的飛船運營商,這將使得代碼更乾淨。像這樣:

usort($a3, function($a,$b) { 
    return $a[0] <=> $b[0]; 
}); 

這將回:

(
    [0] => Array 
     (
      [readingOrder] => 1 
      [id] => 78 
     ) 

    [1] => Array 
     (
      [readingOrder] => 2 
      [id] => 81 
     ) 

    [2] => Array 
     (
      [readingOrder] => 4 
      [id] => 76 
     ) 

    [3] => Array 
     (
      [readingOrder] => 5 
      [id] => 82 
     ) 

    [4] => Array 
     (
      [readingOrder] => 6 
      [id] => 80 
     ) 

    [5] => Array 
     (
      [readingOrder] => 7 
      [id] => 84 
     ) 

    [6] => Array 
     (
      [readingOrder] => 8 
      [id] => 85 
     ) 

) 
+0

這不是他問的。 –

+0

@CasimiretHippolyte我不好。我必須說,他不是很清楚他想要達到什麼目的。 –

+1

理想的結果很明顯,但他想這麼做的原因是一個深奧的謎團。 –

1

你可以建立陣列那樣:

$current = 1; 
$arr3 = []; 
while ($arr1 && $arr2) { 
    if ($arr1[0]['readingOrder'] > $current) 
     $arr3[] = array_shift($arr2); 
    else 
     $arr3[] = array_shift($arr1); 
    $current++; 
} 

$arr3 = array_merge($arr3, $arr1, $arr2); 

print_r($arr3); 

注意,該代碼是破壞性的$arr1$arr2。如果您想保留它們,請先複製它們,然後再使用這些副本。

+0

非常感謝。這個答案是根據我的要求確切的。 –

相關問題