数组:用另一个数组中的值替换值

时间:2018-04-05 14:20:26

标签: php arrays

我有

$Array1 = [3=>'dog', 7=>'cat', 9=>'duck', 10=>'dog', 11=>'dog'];
$Array2 = ['cat'=>'sofa', 'dog'=>'kennel', 'duck'=>'pond'];

我想要输出$ ArrayOut where

$ArrayOut = [3=>'kennel', 7=>'sofa', 9=>'pond', 10=>'kennel', 11=>'kennel'];

我可以通过foreach循环

轻松完成此操作
foreach ($Array1 as $key => $value) {
    $ArrayOut[$key] = $Array2[$value];
}

但我在想是否可以避免循环并使用内置PHP数组函数的组合来创建相同的输出。

任何线索都会有所帮助,谢谢。

3 个答案:

答案 0 :(得分:4)

我认为这可以解决问题。

$Array1 = [3=>'dog', 7=>'cat', 9=>'duck', 10=>'dog', 11=>'dog'];
$Array2 = ['cat'=>'sofa', 'dog'=>'kennel', 'duck'=>'pond'];

$ArrayOut = array_map(function($v) use($Array2){
    return $Array2[$v];
}, $Array1);
print_r($ArrayOut);
//Array ( [3] => kennel [7] => sofa [9] => pond [10] => kennel [11] => kennel )

答案 1 :(得分:0)

试试这个:

$Array1 = [3=>'dog', 7=>'cat', 9=>'duck'];
$Array2 = ['cat'=>'sofa', 'dog'=>'kennel', 'duck'=>'pond'];

$new = array_flip($Array1);
$new2 = array_replace($Array2, $new);
$n = array_combine(array_merge($new2, $new), $Array2);
print_r($n);

Ouptut:

Array
(
    [7] => sofa
    [3] => kennel
    [9] => pond
)

答案 2 :(得分:-1)

编辑:我错过了目的。在我看来,你最好的选择是使用foreach数组。

如果有人要求将一个数组中的值与另一个数组的键匹配,我仍然会留下我的答案供将来参考

只要你的数组符合你想要的顺序,你就可以使用它。

  

http://php.net/manual/en/function.array-combine.php

     

http://php.net/manual/en/function.array-values.php

     

http://php.net/manual/en/function.array-keys.php

array_keys将提取到一个数组中,即指定数组的键

array_values将提取到一个数组中,指定数组的值

正如函数所说,

array_combine会将匹配参数组合成一个数组 - 第一个数组参数是键,第二个数组是值。