按键过滤数组 "version style"

Filter array by key having "version style"

我是 php 的新手,我仍在学习它的逻辑。 我有一个这样的数组:

$arr=array("1.1"=>"Val", "1.1.1"=>"Val", "1.1.1.1"=>"Val",
       "1.1.1.2"=>"Val", "1.1.1.3"=>"Val", 
       "1.1.1.4"=>"Val", "1.1.2"=>"Val", "1.1.3"=>"Val",
       "1.1.4"=>"Val", "1.1.5"=>"Val", "1.1.6"=>"Val",
       "1.1.7"=>"Val", "1.1.8"=>"Val", "1.1.9"=>"Val",
       "1.1.10"=>"Val", "1.1.11"=>"Val");

我需要过滤它以提取组“1.1.1”的项目
所以,我的结果应该是:

$arr2=array("1.1.1"=>"Val", "1.1.1.1"=>"Val",
       "1.1.1.2"=>"Val", "1.1.1.3"=>"Val", 
       "1.1.1.4"=>"Val");

我编写了以下(有效)代码,但我无法将相同的逻辑放入可用于 array_filter

的函数中
$arr2=array();
$StartWith="1.1.1";
foreach ($arr as $k=>$v){
    $sp=strpos($k, $StartWith);
    if ($sp===0){
        if (strlen($k)==strlen($StartWith) ||
            strlen($k)>strlen($StartWith) && substr($k,strlen($StartWith),1)=='.'){
        $arr2[$k]=$v;
        }
    }
}

现在,我的问题是:

用array_filter代替上面的代码好吗idea/practice?

如果是,请帮我写一个函数(我还不知道怎么写)。

array_filter()在这里不是很有用(甚至可能会发生回调函数使其变重)。

你可以像下面那样做(更快更容易):-

$search = '1.1.1';

$final = [];

if(isset($arr[$search])){
    $final[$search] = $arr[$search];
 }
foreach($arr as $key=>$val){
    if(count(explode('.',$search)) < count(explode('.',$key)) && array_intersect(explode('.',$search),explode('.',$key)) == explode('.',$search)){
        $final[$key]= $val;
    }
}

print_r($final);

输出:-https://eval.in/897183