【问题标题】:Pass comma separated key string and get value of array according to key in PHP传递逗号分隔的键字符串并根据PHP中的键获取数组的值
【发布时间】:2018-08-24 11:39:53
【问题描述】:

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


【解决方案1】:

使用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

【讨论】:

  • 看起来是最聪明的答案,但我测试并得到apple,banana 作为输出(缺少orange
  • @AymDev True 我不得不吃掉我的一些评论,需要一个 array_flip。答案已编辑
  • 现在说得通了! +1
【解决方案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

【讨论】:

  • 看起来比我的回答好,不错!
  • 你不需要array_flip和array_intersect_key
【解决方案3】:

你可以试试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
)

【讨论】:

    【解决方案4】:

    另一种方法是使用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
        )
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      相关资源
      最近更新 更多