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

如何在数组中搜索数字组合(支持无序匹配)

解决方案:忽略顺序匹配数字组合

要实现这个需求,核心是不关心数字的排列顺序,只校验两组数字的集合是否完全一致。我们可以通过「拆分字符串→排序数组→比对数组」的思路来实现,以下是PHP代码示例:

完整代码实现

<?php
// 你的目标数组
$ar = ['01-05-24-30-35-36', '25-27-32-34-37-42', '11-17-18-22-33-41'];

/**
 * 匹配数字组合的函数
 * @param string $input 输入的数字组合字符串(格式如"01-05-24-30-35-36")
 * @param array $targetArray 目标数组
 * @return array 所有匹配成功的项
 */
function matchNumberCombination(string $input, array $targetArray): array {
    // 处理输入:拆分为数字数组并排序
    $inputNumbers = explode('-', $input);
    sort($inputNumbers);
    
    $matches = [];
    foreach ($targetArray as $item) {
        // 处理目标项:拆分为数字数组并排序
        $itemNumbers = explode('-', $item);
        sort($itemNumbers);
        
        // 排序后比对,完全一致则视为匹配
        if ($inputNumbers === $itemNumbers) {
            $matches[] = $item;
        }
    }
    
    return $matches;
}

// 测试输入A
$inputA = '01-05-24-30-35-36';
echo "输入A的匹配结果:" . implode(', ', matchNumberCombination($inputA, $ar)) . "\n";

// 测试输入B
$inputB = '05-30-01-36-35-24';
echo "输入B的匹配结果:" . implode(', ', matchNumberCombination($inputB, $ar)) . "\n";

// 测试输入C
$inputC = '01-05-24-30-35-33';
echo "输入C的匹配结果:" . (empty(matchNumberCombination($inputC, $ar)) ? '无匹配项' : implode(', ', matchNumberCombination($inputC, $ar))) . "\n";
?>

代码逻辑说明

  • 拆分字符串:用explode('-', $str)把连字符分隔的字符串拆成单个数字的数组;
  • 排序数组:通过sort()对数字数组排序,这样不管原始顺序如何,只要数字集合相同,排序后的数组就完全一致;
  • 比对数组:用===严格比较两个排序后的数组,相等则说明两组数字完全匹配。

运行这段代码后,你会得到如下输出:

输入A的匹配结果:01-05-24-30-35-36
输入B的匹配结果:01-05-24-30-35-36
输入C的匹配结果:无匹配项

完全符合你给出的匹配规则~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:45:05