首页 > 解决方案 > 如何合并两个不同的数组PHP

问题描述

我需要结合两个不同的领域。在第一个字段中,我生成一个月中的几天。我想列出一个月中的所有日子。我想为它们添加第二个字段,其中每天都有项目。但是,例如,周末或其他日子没有项目。IE。第二个字段总是有更少的项目。第二个字段是从 DB 收紧的。对于第一个字段,我需要像在 MySQL 中一样进行 JOIN。

我突然想到,在 MySQL 中可以创建一个带有给定月份的临时表并将其链接到此处,但我认为它不正确。

$arrayDate = [0 => '20210401',1 => '20210402',2 => '20210403',3 => '20210404',4 => '20210405',5 => '20210406',6 => '20210407',7 => '20210408',8 => '20210409',9 => '20210410',10 => '20210411',11 => '20210412',12 => '20210413',13 => '20210414',14 => '20210415',15 => '20210416',16 => '20210417',17 => '20210418',18 => '20210419',19 => '20210420',20 => '20210421',21 => '20210422',22 => '20210423',23 => '20210424',24 => '20210425',25 => '20210426',26 => '20210427',27 => '20210428',28 => '20210429',29 => '20210430'];
$arrayItem[35] = ['id' => 35, 'date' => '20210401', 'item' => 'aaaa'];
$arrayItem[36] =  ['id' => 36, 'date' => '20210402', 'item' => 'bbbb'];
$arrayItem[37] =  ['id' => 36, 'date' => '20210430', 'item' => 'cccc'];

// i need output
20210401 - aaaa
20210402 - bbbb
20210403 - empty
20210404 - empty
...
20210430 - cccc

编辑:我使用嵌套循环,但我仍然无法获得正确的输出

    foreach ($arrayDate as $date) {
        foreach ($arrayItem as $item) {
            if ($date == $item['date']) {
                bdump($item['date']);
            } else {
                bdump($date);
            }
        }
    }

bdump($item['date']) = '20210401', '20210402', '20210430'
bdump($date) = '20210401', '20210401', '20210402', '20210402', '20210403', '20210403', '20210403', '20210404', '20210404', '20210404', '20210405', '20210405', '20210405' ....

标签: phparrays

解决方案


使用array_column您可以从 $arrayItem 创建一个以日期为键的数组。$dateItem 是一个类似的数组

array (
  20210401 => "aaaa",
  20210402 => "bbbb",
  20210430 => "cccc",
)

您可以使用简单的 foreach 完成的输出。

$dateItem = array_column($arrayItem,'item','date');
foreach($arrayDate as $date){
  echo $date.' '.($dateItem[$date] ?? 'empty')."<br>\n";
}

笔记:

array_column($arrayItem,null,'date') 

你得到一个二维数组,其中日期作为可以使用的键。

array (
  20210401 => 
  array (
    'id' => 35,
    'date' => "20210401",
    'item' => "aaaa",
  ),
  20210402 => 
  array (
    'id' => 36,
    'date' => "20210402",
    'item' => "bbbb",
  ),
  20210430 => 
  array (
    'id' => 36,
    'date' => "20210430",
    'item' => "cccc",
  ),
)

推荐阅读