I have an array that contains data of incoming mail, looks something like this:
$incomingMail = [
0 => [
'title' => 'Title 1',
'areaCode' => 101
],
1 => [
'title' => 'Title 2',
'areaCode' => 101
],
2 => [
'title' => 'Title 3',
'areaCode' => 102
]
];
And another array containing area name and code, the array looks like this:
$areaArr = [
0 => [
'name' => 'Area 1',
'code' => 101
],
1 => [
'name' => 'Area 2',
'code' => 102
],
2 => [
'name' => 'Area 3',
'code' => 103
],
3 => [
'name' => 'Area 4',
'code' => 104
]
];
I want to create an array that contains the count of incomingMail
array based on areaArr
‘s code, it will kind of looks like this:
$areaWithMailCount = [
0 => [
'areaName' => 'Area 1',
'areaCode' => 101,
'mailCount' => 2
],
1 => [
'areaName' => 'Area 2',
'areaCode' => 102,
'mailCount' => 1
],
2 => [
'areaName' => 'Area 3',
'areaCode' => 103,
'mailCount' => 0
],
3 => [
'areaName' => 'Area 4',
'areaCode' => 104,
'mailCount' => 0
]
];
I have tried to loop those arrays and add the condition based on area code but the result isn’t quite what I wanted, the code looks something like this:
$areaWithMailCount = [];
foreach($areaArr as $area) {
foreach($incomingMail as $mail) {
if($mail['areaCode'] == $area['code']) {
$areaWithMailCount[] = [
'areaName' => $area['name'],
'areaCode' => $area['code'],
'mailCount' => count($mail)
];
}
}
}
The result from above code is like this:
[
0 => [
"areaName" => "Area 1"
"areaCode" => 101
"mailCount" => 2
],
1 => [
"areaName" => "Area 1"
"areaCode" => 101
"mailCount" => 2
],
2 => [
"areaName" => "Area 2"
"areaCode" => 102
"mailCount" => 2
]
];
Any ideas how to achieve that? Thanks in advance.
>Solution :
You can achieve the desired result using a nested loop to iterate over each element of $areaArr
, and for each element, loop through $incomingMail
to count the number of mails with the same area code. Here’s how you can do it:
$areaWithMailCount = [];
foreach ($areaArr as $area) {
$mailCount = 0;
foreach ($incomingMail as $mail) {
if ($mail['areaCode'] == $area['code']) {
$mailCount++;
}
}
$areaWithMailCount[] = [
'areaName' => $area['name'],
'areaCode' => $area['code'],
'mailCount' => $mailCount
];
}
In this code, we first initialize the mail count to 0. We then loop through $incomingMail
and check if the area code matches that of the current $area
. If it does, we increment the mail count. Finally, we add a new element to $areaWithMailCount with the area name, code, and mail count.
This should give you the desired result in $areaWithMailCount
.