按键过滤数组"版本样式"

时间:2017-11-10 11:11:40

标签: php array-filter

我是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而不是上面的代码是一个好主意/做法吗?

如果是,请帮我写一个函数(我不明白怎么做)。

1 个答案:

答案 0 :(得分:0)

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