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

问题描述 投票:0回答:5

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

php arrays string
5个回答
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
投票

建议:为每个值使用单独的行,以更好地操作。虽然您已经创建了从

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
投票

你可以尝试使用

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
)

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

0
投票

您想要基于映射数组将一个字符串转换为另一个字符串。 整个任务只需

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
© www.soinside.com 2019 - 2024. All rights reserved.