PHP如何统计二维数组中的重复值?
解决二维数组中用户名出现次数统计的问题
嘿,我来帮你搞定这个二维数组的统计需求!其实实现起来很简单,下面给你两种可行的方案,都能输出你想要的格式:
方案一:手动遍历计数(兼容性强)
先把你的原始数组整理成清晰的格式,然后一步步统计:
// 你的原始二维数组 $usersArray = [ 55118 => ['id' => 55118, 'usr_name' => 'Name 1', 'usr_employment' => 'Fulltime'], 55179 => ['id' => 55179, 'usr_name' => 'Name 2', 'usr_employment' => 'Fulltime'], 55549 => ['id' => 55549, 'usr_name' => 'Name 1', 'usr_employment' => 'Fulltime'], ]; // 初始化一个空数组,用来存储每个名字的出现次数 $nameCounts = []; // 遍历原始数组,逐个统计用户名 foreach ($usersArray as $user) { $currentName = $user['usr_name']; // 如果名字已经在统计数组里,次数加1;否则初始化为1 if (isset($nameCounts[$currentName])) { $nameCounts[$currentName]++; } else { $nameCounts[$currentName] = 1; } } // 按照要求的格式输出结果,注意单数复数的区分 foreach ($nameCounts as $name => $count) { echo "$name, $count " . ($count === 1 ? 'time' : 'times') . "\n"; }
运行这段代码后,输出就是你想要的:
Name 1, 2 times Name 2, 1 time
方案二:用PHP内置函数简化代码(更高效)
如果你的PHP版本在5.5及以上,可以用array_column和array_count_values这两个内置函数,一行搞定统计部分:
// 你的原始数组(同上) $usersArray = [ 55118 => ['id' => 55118, 'usr_name' => 'Name 1', 'usr_employment' => 'Fulltime'], 55179 => ['id' => 55179, 'usr_name' => 'Name 2', 'usr_employment' => 'Fulltime'], 55549 => ['id' => 55549, 'usr_name' => 'Name 1', 'usr_employment' => 'Fulltime'], ]; // 提取所有用户名到一维数组 $allNames = array_column($usersArray, 'usr_name'); // 直接统计每个名字的出现次数 $nameCounts = array_count_values($allNames); // 同样的输出逻辑 foreach ($nameCounts as $name => $count) { echo "$name, $count " . ($count === 1 ? 'time' : 'times') . "\n"; }
这个方案的逻辑和手动遍历是一样的,只是用内置函数减少了代码量,效率也更高~
内容的提问来源于stack exchange,提问作者Björn C
相关产品推荐
相关产品推荐

