我是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而不是上面的代码是一个好主意/做法吗?
如果是,请帮我写一个函数(我不明白怎么做)。
答案 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