首页 > 解决方案 > php预匹配。查找两个值不按顺序排列的元素

问题描述

我得到了这样的数组:

$array = array(
    3A32,
    4565,
    7890,
    0012,
    A324,
    9002,
    3200,
    345A,
    0436
);

然后我需要找出哪些元素有两个数字。number 的值可以改变。

如果值为:

$n1 = 0; 
$n2 = 3;

对于该搜索preg_match()应该返回(3200,0436)

如果值为:

$n1 = 0; 
$n2 = 0;

preg_match()应该返回(0012,3200,9002)

任何想法?

谢谢。

标签: phppreg-match

解决方案


在多次查看您的输入数组以及基于给定数字的输出后,我得到了您的逻辑。

由于我的正则表达式一点都不好,所以我会用常见的PHP函数来寻找答案。

1.创建一个函数,该函数接受初始数组以及数组形式的搜索数字(以便您可以搜索任何数字和任何长度的数字)。

2.现在迭代初始数组,拆分每个值以转换为数组,array_count_value()并对拆分数组和数字数组执行。现在应用检查并查看是否找到完全匹配?

3.将此匹配分配给在函数本身下声明的新数组。

4.在函数结束时返回这个数组。

$n1 = 0; 
$n2 = 0;

function checkValues($array,$numbers=array()){
    $finalArray = [];
    if(!empty($numbers)){
        foreach($array as $arr){
            $splitArr = str_split($arr);
            $matched = true;
            $count_number_Array = array_count_values($numbers);
            $count_split_array = array_count_values($splitArr);
            foreach($count_number_Array as $key=>$value){
                if(!isset($count_split_array[$key]) || $count_split_array[$key] < $value){
                    $matched = false;
                    break;
                }
            }
            if($matched === true){
                $finalArray[] = $arr;
            }

        }

    }

    return $finalArray;
}

print_r(checkValues($array, array($n1,$n2)));

输出:https ://3v4l.org/7uWfC和https://3v4l.org/Tuu5mhttps://3v4l.org/fEKTO


推荐阅读