我有两个数组:
$array1 = [29, 1=>'a', 2=>'x',3=>'c', 11];
$array2 = ['a'=>20, 'x'=>21, 'c'=>23];
我想得到一个看起来像这样的数组:
$array3 = [29, 20, 21, 23, 11];
我知道如何使用foreach循环来完成它,但我想知道它是否可以作为一个单行程,或者可能具有某种匿名函数。 谢谢!!
答案 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_int
或is_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()
功能。您可以在下面了解有关此功能的更多信息: