如何在数组中搜索数字组合(支持无序匹配)
解决方案:忽略顺序匹配数字组合
要实现这个需求,核心是不关心数字的排列顺序,只校验两组数字的集合是否完全一致。我们可以通过「拆分字符串→排序数组→比对数组」的思路来实现,以下是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
相关产品推荐
相关产品推荐

