从另一个数组替换一个数组的值,使用值替换为键,php

时间:2017-09-25 15:21:23

标签: php arrays

我有两个数组:

$array1 = [29, 1=>'a', 2=>'x',3=>'c', 11];
$array2 = ['a'=>20, 'x'=>21, 'c'=>23];

我想得到一个看起来像这样的数组:

$array3 = [29, 20, 21, 23, 11];

我知道如何使用foreach循环来完成它,但我想知道它是否可以作为一个单行程,或者可能具有某种匿名函数。 谢谢!!

4 个答案:

答案 0 :(得分:2)

您可以添加它们并过滤掉非数字值:

$array3 = array_values(array_filter($array1 + $array2, 'is_numeric'));

如果订单很重要:

$array3 = array_filter(call_user_func_array(
                       'array_merge', array_map(null, $array1, $array2)), 
                       'is_numeric');

如果您需要重新编制索引,请array_values

在任何一种情况下,如果您只想要整数或浮点数,请使用is_intis_float

答案 1 :(得分:2)

array_map以及另一个答案:

$array1 = [29, 1=>'a', 2=>'x',3=>'c', 11];
$array2 = ['a'=>20, 'x'=>21, 'c'=>23];

$array3 = array_map(function($a) use($array2){return is_int($a) ? $a : $array2[$a];}, $array1);

答案 2 :(得分:1)

尝试使用单行:

$array1 = [29, 1=>'a', 2=>'x',3=>'c', 11];
$array2 = ['a'=>20, 'x'=>21, 'c'=>23];

$array3 = array_values(array_filter(array_merge($array1,$array2),function($i){return is_int($i);}));

print_r($array3);

// Outputs :
/*
Array
(
    [0] => 29
    [1] => 11
    [2] => 20
    [3] => 21
    [4] => 23
)
*/

答案 3 :(得分:-1)

如果您不想使用foreach(),可以使用array_replace()功能。您可以在下面了解有关此功能的更多信息:

Array_replace($array1 , $array2, $...) in php.net