PHP多维数组动态匹配计数通用实现方案求助
动态键值数组匹配计数方案
直接上通用实现,核心是通过遍历动态条件数组$find,逐个校验用户数据是否满足所有条件:
示例数据
先定义固定结构的$users数组:
$users = [ ['id' => 1, 'name' => '张三', 'age' => 25, 'city' => '上海', 'gender' => '男'], ['id' => 2, 'name' => '李四', 'age' => 30, 'city' => '北京', 'gender' => '男'], ['id' => 3, 'name' => '王五', 'age' => 25, 'city' => '上海', 'gender' => '女'], ['id' => 4, 'name' => '赵六', 'age' => 35, 'city' => '北京', 'gender' => '男'], ];
通用计数函数
写一个通用函数,不管$find的键值怎么变,都能适配:
function countMatchingUsers($users, $find) { // 过滤出符合所有条件的用户 $matchedUsers = array_filter($users, function($user) use ($find) { // 遍历$find的每个键值对,逐一校验 foreach ($find as $key => $value) { // 如果用户没有该键,或者值不匹配,直接返回false if (!isset($user[$key]) || $user[$key] !== $value) { return false; } } // 所有条件都满足,返回true return true; }); // 返回匹配的数量 return count($matchedUsers); }
测试不同的$find场景
- 单条件匹配(比如找年龄25的用户):
$find1 = ['age' => 25]; echo countMatchingUsers($users, $find1); // 输出:2
- 多条件匹配(比如找北京的男性用户):
$find2 = ['city' => '北京', 'gender' => '男']; echo countMatchingUsers($users, $find2); // 输出:2
补充说明
- 如果需要模糊匹配(比如包含某个字符串、数值范围),只需要修改foreach里的判断逻辑,比如把
$user[$key] !== $value改成str_contains($user[$key], $value)或者$user[$key] >= $value之类的。 - 如果
$users里所有元素都必然包含$find中的键,那isset($user[$key])可以去掉,简化判断。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

