我有一个变量,它包含逗号分隔值,如下所示:$str = "1,5";
要将其转换为数组,我有以下代码:
$str = "1,5";
$replacements = explode(',', $str);
现在数组如下所示:
Array
(
[0] => 1
[1] => 5
)
我有另一个数组:$base = array('1'=>'Bread','5'=>'Butter');
我想要做的是根据关联数组的key
和数值数组的值,用上面的关联数组的值替换数值数组的值,它应如下所示:
// This is what I am trying to achive
Array
(
[0] => Bread // because 1 = Bread in the assoc. array
[1] => Butter // because 5 = Butter in the assoc. array
)
为了达到这个目的,我尝试了以下代码:
$str = "1,5";
$replacements = explode(',', $str);
$base = array('1'=>'Bread','5'=>'Butter');
$basket = array_replace($base, $replacements);
print_r($basket);
但它给了我以下输出:
Array
(
[1] => 5
[5] => Butter
[0] => 1
)
你能告诉我如何解决这个问题吗?
答案 0 :(得分:6)
$str = "1,5";
$replacements = explode(',', $str);
$base = array('1'=>'Bread','5'=>'Butter');
$basket = array();
foreach($replacements as $value) {
$basket[]=$base[$value];
}
答案 1 :(得分:4)
array_replace
比较两个数组的键,而不是键的值。
尝试array_map
。
$basket = array_map(function($a) use($base){
return $base[$a];
}, $replacements);
答案 2 :(得分:3)
查看 array_combine
。此方法允许您使用一个数组作为键,另一个数组作为值。然后你可以使用array_values($base)
来抓取值部分并从那里组合。
好的,喝完几口咖啡后,你可以使用内置方法:
array_intersect_keys
根据另一个阵列的主要匹配从一个阵列中拉出比赛。array_fill_keys
将您的$replacements
数组转换为array(1=>0,5=>0)
,以便我们可以在array_intersect_keys
中使用它。代码:
$str = "1,5";
$replacements = explode(',', $str);
$base = array(
1 => 'Bread',
2 => 'Gravy',
3 => 'Stuffing',
4 => 'Turkey',
5 => 'Butter',
6 => 'Squash'
);
var_dump(array_intersect_key($base, array_fill_keys($replacements,0)));
结果:
array(2) {
[1]=>
string(5) "Bread"
[5]=>
string(6) "Butter"
}
正如@nickb在评论中指出的那样,如果您希望密钥为[0],[1]
,只需在结果上调用array_values
即可。此外,如果订单很重要,可以在sort
之前调用$replacements
,然后再进行提取。
答案 3 :(得分:2)
如果您explode()
得到array_flip()
数组,您可以获得一些有趣的结果:
$flipped = array_flip( explode(',', $str));
<强>结果:强>
Array
(
[1] => 0
[5] => 1
)
现在,您可以使用array_intersect_key()
将$base
数组和$flipped
数组与键相交:
$intersection = array_intersect_key( $base, $flipped);
<强>结果:强>
Array
(
[1] => Bread
[5] => Butter
)
然后,只需使用array_values()
:重置索引(如果您不关心索引,可能需要也可能不需要,然后省略此步骤)
$replacements = array_values( $intersection);
或者,在一行中:
$str = "1,5";
$base = array('1'=>'Bread','5'=>'Butter');
$replacements = array_values( array_intersect_key( $base, array_flip( explode(',', $str))));
这prints:
Array
(
[0] => Bread
[1] => Butter
)
答案 4 :(得分:1)
试试这个:
$basket=array();
foreach($replacements as $value) {
array_push($basket, $base[$value]);
}
print_r($basket);
希望它有效。