我试图从数组中获取值,并且只传递逗号分隔的键串,而没有获得相同的输出。是否可以不使用foreach语句。请给我建议。
<?php
$str = "1,2,3";
$array = array("1"=>"apple", "2"=>"banana", "3"=>"orange");
$keyarray = explode(",",$str);
$valArr = array();
foreach($keyarray as $key){
$valArr[] = $array[$key];
}
echo $valStr = implode(",", $valArr);
?>
输出:apple,banana,orange
答案 0 :(得分:2)
建议:为每个值使用单独的行,以改善操作。尽管您已经创建了从Comma sparate key
到Value from array
的正确代码,但是如果您需要它而没有任何循环,则PHP具有一些内置函数,例如array_insersect
,array_flip
到同一输出
$str = "1,2";
$arr1 = ["1"=>"test1","2"=>"test2","3"=>"test3"];
$arr2 = explode(",",$str);
echo implode(", ",array_flip(array_intersect(array_flip($arr1),$arr2)));
答案 1 :(得分:2)
使用array_intersect_key
$str = "1,2,3";
$array = array("1"=>"apple", "2"=>"banana", "3"=>"orange");
$keyarray = explode(",",$str);
echo implode(",", array_intersect_key($array, array_flip($keyarray)));
一个班轮:
echo implode(",", array_intersect_key($array, array_flip(explode(",",$str))));
一团糟,但上面的注释可以解释它的作用。
这意味着您不需要$ keyarray
答案 2 :(得分:1)
您可以尝试使用array_filter
:
$str = "1,2,3";
$array = array("1"=>"apple", "2"=>"banana", "3"=>"orange");
$keyarray = explode(",",$str);
$filtered = array_filter($array, function($v,$k) use($keyarray){
return in_array($k, $keyarray);
},ARRAY_FILTER_USE_BOTH);
print_r($filtered);
输出
Array
(
[1] => apple
[2] => banana
[3] => orange
)
答案 3 :(得分:1)
另一种方式可以使用array_map()
:
echo $valStr = implode(",", array_map(function ($i) use ($array) { return $array[$i]; }, explode(",", $str)));
从下至上阅读:
echo $valStr = implode( // 3. glue values
",",
array_map( // 2. replace integers by fruits
function ($i) use ($array) {
return $array[$i];
},
explode(",", $str) // 1. Split values
)
);