You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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场景

  1. 单条件匹配(比如找年龄25的用户):
$find1 = ['age' => 25];
echo countMatchingUsers($users, $find1); // 输出:2
  1. 多条件匹配(比如找北京的男性用户):
$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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:20:31