如何在二维数组中新增列统计另一二维数组的关联值数量?
正确实现区域邮件统计的PHP方法
需求回顾
将两个二维数组$incomingMail(邮件数据,含title、areaCode)和$areaArr(区域信息,含name、code)合并,生成$areaWithMailCount数组,新增mailCount字段统计对应区域的邮件数(无对应邮件则为0)。
示例数据
// 邮件数组示例 $incomingMail = [ ['title' => '邮件1', 'areaCode' => '001'], ['title' => '邮件2', 'areaCode' => '002'], ['title' => '邮件3', 'areaCode' => '001'], ['title' => '邮件4', 'areaCode' => '003'], ]; // 区域数组示例 $areaArr = [ ['name' => '北京', 'code' => '001'], ['name' => '上海', 'code' => '002'], ['name' => '广州', 'code' => '003'], ['name' => '深圳', 'code' => '004'], ];
高效实现方案(推荐)
先预处理邮件数组统计各区域邮件数,再遍历区域数组赋值,时间复杂度更低(O(n+m)):
// 1. 预处理:统计每个区域的邮件数量 $mailCountMap = []; foreach ($incomingMail as $mail) { $code = $mail['areaCode']; $mailCountMap[$code] = isset($mailCountMap[$code]) ? $mailCountMap[$code] + 1 : 1; } // 2. 生成带统计的区域数组 $areaWithMailCount = []; foreach ($areaArr as $area) { $areaCode = $area['code']; $count = isset($mailCountMap[$areaCode]) ? $mailCountMap[$areaCode] : 0; $areaWithMailCount[] = [ 'name' => $area['name'], 'code' => $areaCode, 'mailCount' => $count ]; } // 输出结果 print_r($areaWithMailCount);
执行后输出:
Array ( [0] => Array ( [name] => 北京 [code] => 001 [mailCount] => 2 ) [1] => Array ( [name] => 上海 [code] => 002 [mailCount] => 1 ) [2] => Array ( [name] => 广州 [code] => 003 [mailCount] => 1 ) [3] => Array ( [name] => 深圳 [code] => 004 [mailCount] => 0 ) )
嵌套循环的正确写法
如果一定要用嵌套循环,需注意每次外层循环都初始化计数为0,避免累加错误:
$areaWithMailCount = []; foreach ($areaArr as $area) { $count = 0; // 关键:每个区域单独初始化计数 foreach ($incomingMail as $mail) { if ($mail['areaCode'] === $area['code']) { $count++; } } $areaWithMailCount[] = [ 'name' => $area['name'], 'code' => $area['code'], 'mailCount' => $count ]; }
常见错误分析
多数嵌套循环失败的原因是计数变量未在每次外层循环初始化,比如错误代码:
// 错误示例:count仅初始化一次,导致计数累加所有区域邮件 $areaWithMailCount = []; $count = 0; foreach ($areaArr as $area) { foreach ($incomingMail as $mail) { if ($mail['areaCode'] === $area['code']) { $count++; } } $areaWithMailCount[] = [..., 'mailCount' => $count]; }
这种写法会让后续区域的mailCount累加之前所有区域的邮件数,完全不符合预期。
内容的提问来源于stack exchange,提问作者Rizky Irmawan
相关产品推荐
相关产品推荐

