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

PHP基于指定关联数组按输入值匹配对应名称组合的实现咨询

PHP 两权重和匹配功能实现

实现逻辑

该需求对应经典的两数之和算法场景,以下提供两种适配不同场景的实现方案:

  • 暴力枚举法:逻辑简单无额外空间消耗,适合本题这种元素数量少的数组场景
  • 哈希表查找法:时间复杂度更低,适合元素数量多的业务场景

暴力枚举法实现(适合小数据量)

<?php
// 预设关联数组
$groups_name = array("jhon"=>"20", "aliza"=>"30", "rehana"=>"40", "adiba"=>"50", "black"=>"1000", "white"=>"7500", "red"=>"3500");

/**
 * 匹配权重和等于目标值的两个名称
 * @param array $groups 预设的名称-权重关联数组
 * @param int $target 输入的目标总和
 * @return array 匹配到的名称对,无匹配返回空数组
 */
function matchTwoGroups($groups, $target) {
    $names = array_keys($groups);
    $len = count($names);
    // 双重遍历避免重复匹配
    for ($i = 0; $i < $len; $i++) {
        $weight1 = (int)$groups[$names[$i]];
        for ($j = $i + 1; $j < $len; $j++) {
            $weight2 = (int)$groups[$names[$j]];
            if ($weight1 + $weight2 == $target) {
                return [$names[$i], $names[$j]];
            }
        }
    }
    return [];
}

// 测试示例
$test1 = matchTwoGroups($groups_name, 50);
$test2 = matchTwoGroups($groups_name, 70);
$test3 = matchTwoGroups($groups_name, 4500);
print_r($test1); // 输出 Array ( [0] => jhon [1] => aliza )
print_r($test2); // 输出 Array ( [0] => jhon [1] => adiba )
print_r($test3); // 输出 Array ( [0] => black [1] => red )
?>

哈希表法实现(适合大数据量)

如果后续数组元素数量大幅增长,可改用时间复杂度更低的哈希表方案:

function matchTwoGroupsHash($groups, $target) {
    $weightMap = [];
    foreach ($groups as $name => $weight) {
        $weight = (int)$weight;
        $diff = $target - $weight;
        // 检查差值是否已经存在于哈希表中
        if (isset($weightMap[$diff])) {
            return [$weightMap[$diff], $name];
        }
        // 不存在则将当前权重和名称存入哈希表
        $weightMap[$weight] = $name;
    }
    return [];
}

注意事项

  • 代码中已做了权重的整型强制转换,避免原数组值为字符串时出现计算错误
  • 以上实现默认返回第一组匹配到的结果,如果需要返回所有符合条件的配对,只需将return改为将结果推入结果数组,遍历结束后统一返回即可

内容的提问来源于stack exchange,提问作者Qaiser420

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:06:00