从数组查找key对应的值

php
$arr = [5=>'name',8=>'age',10=>'city']; $num = '5,10'; $str = ''; //如何查找5,10对应的值,就是输出'name,city',除了foreach还有什么更方便的办法? foreach($arr as $key=>$value){ if(strpos($num,$key) !== false) { $str.=$value; } }
阅读 11.6k
5 个回答
$arr = array(5=>'name',8=>'age',10=>'city');
$num = '5,10';
var_dump(array_intersect_key($arr,array_flip(explode(',',$num))));

//output
array (size=2)
5 => string 'name' (length=4)
10 => string 'city' (length=4)

<?php

$arr = array(5=>'name',8=>'age',10=>'city');
$num = '5,10';

$str = array();
$explode = explode(',',$num);
foreach($explode as $key){
    if(array_key_exists($key,$arr)){
        array_push($str,$arr[$key]);
    }
}

echo implode(',',$str);

?>

用array_key_exists判断,楼上已给出代码!

除了楼上给出的分解$num后通过array_key_exists$arr数组寻找相应的值后在implode到一起之外。我给出另外一种通过正则替换的实现方式:

$arr = [5=>'name',8=>'age',10=>'city'];
$num = '5,10';

$res = preg_replace_callback(
    '/(\d+)/', 
    function($matches){
        global $arr;
        return array_key_exists($matches[1], $arr) ? $arr[$matches[1]] : $matches[1];
    },
    $num
);

echo $num."\n";
echo $res;

一行代码就可以做到:

implode(',',array_only($arr,explode(',',$num)))
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题