Передать строку ключа через запятую и получить значение массива в соответствии с ключом в PHP - PullRequest
0 голосов
/ 24 августа 2018

Я пытаюсь получить значение из массива и передать только строку ключа через запятую и получить тот же вывод без. Возможно ли это без использования оператора 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 голосов
/ 24 августа 2018

Использовать 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

0 голосов
/ 24 августа 2018

вы можете попробовать использовать 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);

OUTPUT

Array
(
    [1] => apple
    [2] => banana
    [3] => orange
)
0 голосов
/ 24 августа 2018

Другим способом может быть использование 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 голосов
/ 24 августа 2018

Предложение : используйте отдельную строку для каждого значения, чтобы улучшить работу.Несмотря на то, что вы создали правильный код для перехода от 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)));

Живая демоверсия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...