我试图从数组中获取值并仅传递逗号分隔的键字符串并获得相同的输出。是否可以不使用 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
使用 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
建议:为每个值使用单独的行,以更好地操作。虽然您已经创建了从
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)));
你可以尝试使用
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
)
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
)
);
您想要基于映射数组将一个字符串转换为另一个字符串。 整个任务只需
preg_replace_callback()
即可完成。 演示
匹配每个整数并将其替换为查找数组中对应的字符串。
$str = "1,2,3";
$array = [
"1" => "apple",
"2" => "banana",
"3" => "orange"
];
echo preg_replace_callback(
'/\d+/',
fn($m) => $array[$m[0]] ?? $m[0],
$str
);
# apple,banana,orange