传递逗号分隔的键字符串并根据PHP中的键获取数组的值

时间:2018-08-24 11:39:54

标签: php arrays string

我试图从数组中获取值,并且只传递逗号分隔的键串,而没有获得相同的输出。是否可以不使用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

4 个答案:

答案 0 :(得分:2)

建议:为每个值使用单独的行,以改善操作。尽管您已经创建了从Comma sparate keyValue from array的正确代码,但是如果您需要它而没有任何循环,则PHP具有一些内置函数,例如array_insersectarray_flip到同一输出

$str = "1,2";
$arr1 = ["1"=>"test1","2"=>"test2","3"=>"test3"];
$arr2  = explode(",",$str);
echo implode(", ",array_flip(array_intersect(array_flip($arr1),$arr2)));

Live demo

答案 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)));

https://3v4l.org/gmcON


一个班轮:

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
    )
);