Bob
Bob

Reputation: 21

How to merge two different array PHP

I would need to combine two different fields. In the first field I generate days of the month. I want to list all days of the month. I would like to add a second field to them, where there are items for each day. But, for example, there are no items on weekends or on other days. Ie. that field two will always have fewer items. The second field is tightened from the DB. I would need to do a JOIN like in MySQL for the first field.

It occurred to me that in MySQL it would be possible to make a temporary table with a given month and link it here, but I don't think it's right.

$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

EDIT: I use nested loops, but I still can't get the right output

    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' ....

Upvotes: 0

Views: 67

Answers (1)

jspit
jspit

Reputation: 7683

With array_column you create a array from $arrayItem with date as key. $dateItem is an array like

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

The output you can do with a simple foreach.

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

Note:

With

array_column($arrayItem,null,'date') 

you get a two-dimensional array with a date as a key that can be used.

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",
  ),
)

Upvotes: 1

Related Questions