用另一个关联数组覆盖一个数组的关联元素并反转数组顺序

问题描述 投票:0回答:4

这是第一个数组:

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 个月

我查看了建议的排序数组技术,但没有帮助

php arrays replace reverse
4个回答
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 )
    

1
投票
我看到你已经有了答案,但由于你的目标与几个月有关,我想提供这个:

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; }
    

1
投票
无需循环数组。只需要一件简单的衬里即可。

$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 将替换 array2 中 array1 中的值。


1
投票
根据您提供的当前输入数组,最简单的解决方案如下:

通过保留键来反转第二个数组。

在此处阅读有关 array_reverse 的更多信息

将反向数组替换为要替换其键值的第一个输入数组。

在此处阅读有关 array_replace 的更多信息

$reversedArray = array_reverse($b,1); $result = array_replace($reversedArray,$a); echo "<pre>"; print_r($result);
    
© www.soinside.com 2019 - 2024. All rights reserved.