繁体   English   中英

如何合并两个关联的 arrays

[英]How to merge two associative arrays

我有两个关联的 arrays 像

Array
(
[0] => Array
    (
        [0] => 2022-01-19
        [1] => 6
    )
[1] => Array
    (
        [0] => 2022-01-20
        [1] => 1
    )
[2] => Array
    (
        [0] => 2022-01-21
        [1] => 1
    )
[3] => Array
    (
        [0] => 2022-01-22
        [1] => 2
    )
)

Array
(
[0] => Array
    (
        [0] => 2022-01-17
        [1] => 6
    )
[1] => Array
    (
        [0] => 2022-01-18
        [1] => 1
    )
[2] => Array
    (
        [0] => 2022-01-21
        [1] => 1
    )
[3] => Array
    (
        [0] => 2022-01-23
        [1] => 2
    )
)

我需要将它们与日期合并,并想要一个类似下面的结果数组

Array
(
[0] => Array
    (
        [0] => 2022-01-17
        [1] => 0
        [2] => 6
    )
[1] => Array
    (
        [0] => 2022-01-18
        [1] => 0
        [2] => 1
    )
[2] => Array
    (
        [0] => 2022-01-19
        [1] => 6
        [2] => 0
    )
[3] => Array
    (
        [0] => 2022-01-20
        [1] => 1
        [2] => 0
    )
[4] => Array
    (
        [0] => 2022-01-21
        [1] => 1
        [2] => 1
    )
[5] => Array
    (
        [0] => 2022-01-22
        [1] => 2
        [2] => 0
    )
[6] => Array
    (
        [0] => 2022-01-23
        [1] => 0
        [2] => 2
    )
)

我尝试使用以下代码但没有成功。

$final_array = [];
foreach($openTicket as $val){
    $closeTicketNo = 0;
    foreach($closeTicket as $value){
        if($val[0] == $value[0]){
            $closeTicketNo = $value[1];
        }
    }
    $final_array[] = [$val[0],$val[1],$closeTicketNo];
}

我从$openTicket中获取所有元素,但没有从$closeTicket中获取所有元素到我的结果数组$final_array

此代码首先从每个数组的第一个值中找到所有唯一日期(使用array_unique )( array_column获取值, array_merge将它们放入 1 个数组中)。

然后它按日期索引每个数组(再次使用array_column )。

最后循环遍历唯一的日期并向 output 中添加一个带有值的新元素(使用?? 0以便如果不存在任何值,则数组仍然正确填充)...

$dates = array_unique(array_merge(array_column($openTicket, 0), array_column($closedTicket, 0)));
$open = array_column($openTicket, 1, 0);
$closed = array_column($closedTicket, 1, 0);
$finalArray = [];
foreach ($dates as $date) {
    $finalArray[] = [$date, $open[$date] ?? 0, $closed[$date] ?? 0];
}

你可以这样尝试

$array1 = [
    ['2022-01-19',6],
    ['2022-01-20',1],
    ['2022-01-21',0]
];

$array2 = [
    ['2022-01-17',6],
    ['2022-01-20',2],
    ['2022-01-21',1]
];


function mergeMultiple($array1,$array2){
    foreach($array1 as $item1){
        $mergedArray[$item1[0]] = $item1;
    }

    foreach($array2 as $item2){
        if(isset($mergedArray[$item2[0]]) && !empty($margedArray[$item2[0]])){
            $mergedArray[$item2[0]] = array_unique(array_merge($mergedArray[$item2[0]],$item2));
        }else{
          $mergedArray[$item2[0]] = $item2;
        }
    }

    return array_values($mergedArray);
}

$mergedArray = mergeMultiple($array1,$array2);
ksort($mergedArray);
print_r($mergedArray);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM