2017-09-06 143 views
1

這是第一陣列:轉換陣列所需的陣列

Array 
(
    [6] => 1 
    [8] => 1 
    [9] => 5 
) 

第二陣列:

Array 
(
    [9] => 0 
    [8] => 0 
    [7] => 0 
    [6] => 0 
    [5] => 0 
    [4] => 0 
    [3] => 0 
    [2] => 0 
    [1] => 0 
    [12] => 0 
    [11] => 0 
    [10] => 0 
) 

所需的輸出陣列:

Array 
(
    [10] => 0 
    [11] => 0 
    [12] => 0 
    [1] => 0 
    [2] => 0 
    [3] => 0 
    [4] => 0 
    [5] => 0 
    [6] => 1 
    [7] => 0 
    [8] => 1 
    [9] => 5 
) 

只需欲數組進行排序反向但具有第一個數組值。我已嘗試array_reverse但它只能反向排列短陣列和錯位它的值。

注:所需的陣列關鍵是以前的12個月

我已經看過了建議排序陣列技術,但它並沒有幫助

+0

看看這個功能,'ASORT()','arsort()','ksort()','krsort()'... –

+0

看看'array_merge' – fubar

+0

何必'10'鍵先行? – RomanPerekhrest

回答

1

檢查演示在這裏工作:https://eval.in/856000

<?php 
$array1 = array(6 => 1, 
    8 => 1, 
    9 => 5); 

$array2 = array(9 => 0, 
    8 => 0, 
    7 => 0, 
    6 => 0, 
    5 => 0, 
    4 => 0, 
    3 => 0, 
    2 => 0, 
    1 => 0, 
    12 => 0, 
    11 => 0, 
    10 => 0); 
$mergedArray =[]; 

foreach ($array2 as $key => $value) { 

    if (array_key_exists($key, $array1)) {  
     if ($array1[$key] > $array2[$key]) { 
      $mergedArray[$key] = $array1[$key]; 
     } 
     else { 
      $mergedArray[$key] = $array2[$key]; 
     } 
    } 
    else { 
     $mergedArray[$key] = $array2[$key]; 
    } 
} 

print_r(array_reverse($mergedArray,true)); 

?> 

輸出:

Array 
(
    [10] => 0 
    [11] => 0 
    [12] => 0 
    [1] => 0 
    [2] => 0 
    [3] => 0 
    [4] => 0 
    [5] => 0 
    [6] => 1 
    [7] => 0 
    [8] => 1 
    [9] => 5 
) 
2

我看到你有一個answ呃已經但是因爲你的目標是與幾個月裏,我想提供這樣了:

for ($i = 1; $i <= 12; $i++) { 
    $month = date('n', strtotime($i . ' month')); 
    $merged[$month] = isset($array1[$month]) ? $array1[$month] : $array2[$month]; 
} 

我只是遍歷未來12個月的數字表示,建設該陣列從那裏 - 從優先值$array1。如果$array2僅用於數組鍵並始終以飽滿的默認值(0),你甚至不需要它,你可能做這樣的事情:

for ($i = 1; $i <= 12; $i++) { 
    $month = date('n', strtotime($i . ' month')); 
    $merged[$month] = isset($array1[$month]) ? $array1[$month] : 0; 
} 
2

無需環路的陣列。簡單的一個班輪就是所需要的。

$array1 = array(6 => 1, 
8 => 1, 
9 => 5); 

$array2 = array(9 => 0, 
8 => 0, 
7 => 0, 
6 => 0, 
5 => 0, 
4 => 0, 
3 => 0, 
2 => 0, 
1 => 0, 
12 => 0, 
11 => 0, 
10 => 0); 


$res = array_reverse(array_replace($array2, $array1),true); 

Var_dump($res); 

https://3v4l.org/Xpc26

Array_replace將在數組2取代在array1值。

1

按照您提供,最簡單的解決辦法是爲後續當前輸入數組:通過保留鍵反轉第二陣列

Read more about array_reverse here

將第一個輸入數組的值替換爲您要替換的鍵值。 Read more about array_replace here

$reversedArray = array_reverse($b,1); 
$result = array_replace($reversedArray,$a); 
echo "<pre>"; print_r($result); 
+0

與我的回答不一樣嗎? – Andreas

+0

是的,它是一樣的,但我認爲我們已經同時發佈。當我發佈我的答案時,你的答案不在那裏。 –