使用另一个数组的键值获取数组的值

时间:2019-05-05 12:48:51

标签: php arrays

我有一个带有一些值(数值)的数组:

$arr1 = [1, 3, 8, 12, 23]

,我还有另一个关联数组,键(与$arr1的值匹配)对应于一个值。此数组还可能包含与$arr1不匹配的键。

$arr2 = [1 => "foo", 2 => "foo98", 3 => "foo20", 8 => "foo02", 12 => "foo39", 15 => "foo44", 23 => "foo91", 34 => "foo77"]

我想要返回$arr2的值作为键,指定$arr1的值作为键:

["foo", "foo20", "foo02", "foo39", "foo91"]

如果可能的话,使用PHP数组本机函数(以一种优雅的方式),或者至少使用最少的循环次数,所有这些都无需循环。

2 个答案:

答案 0 :(得分:3)

最小循环很简单-1.如:

foreach($arr1 as $k) {
    $res[] = $arr2[$k];
}

您可以使用array_walk来做到这一点,但我认为这种简单的方法更具可读性。

如果您坚持要使用array_filter + array_values + in_array,请执行以下操作:

$res = array_values(array_filter($arr2,
    function ($key) use ($arr1) { return in_array($key, $arr1);},
    ARRAY_FILTER_USE_KEY
));

有关过滤键的更多信息,您可以查看this

答案 1 :(得分:1)

要纯粹使用数组函数来完成此操作,可以按照以下步骤操作

print_r(array_intersect_key($arr2, array_flip($arr1) ));

因此,array_flip()将要从数组中获得的项目转换为$arr1的键,然后使用array_intersect_key()将键与主数组和这个新创建的数组进行匹配。

给......

Array
(
    [1] => foo
    [3] => foo20
    [8] => foo02
    [12] => foo39
    [23] => foo91
)

如果您不想要按键,请在其余的通话周围添加array_values() ...

print_r(array_values(array_intersect_key($arr2, array_flip($arr1) )));

获得

Array
(
    [0] => foo
    [1] => foo20
    [2] => foo02
    [3] => foo39
    [4] => foo91
)

尽管已指出-有时简单的foreach()一样好,有时更好。