2017-09-06 109 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

是的,它是一样的,但我认为我们已经同时发布。当我发布我的答案时,你的答案不在那里。 –