Php 获取数组的值,将其用作另一个数组的键值

Php 获取数组的值,将其用作另一个数组的键值,php,arrays,Php,Arrays,我有一个带有一些数值的数组: $arr1 = [1, 3, 8, 12, 23] 我还有另一个关联数组,匹配$arr1的键对应一个值。此数组还可能包含与$arr1不匹配的键 我希望返回$arr2的值,并将$arr1的值指定为键: 如果可能的话,所有这些,没有循环,只使用PHP数组本机函数,以优雅的方式,或者至少使用尽可能少的循环数。最小循环很简单-1。作为: foreach($arr1 as $k) { $res[] = $arr2[$k]; } 您可以使用array_walk实现这

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

$arr1 = [1, 3, 8, 12, 23]
我还有另一个关联数组,匹配$arr1的键对应一个值。此数组还可能包含与$arr1不匹配的键

我希望返回$arr2的值,并将$arr1的值指定为键:


如果可能的话,所有这些,没有循环,只使用PHP数组本机函数,以优雅的方式,或者至少使用尽可能少的循环数。

最小循环很简单-1。作为:

foreach($arr1 as $k) {
    $res[] = $arr2[$k];
}
您可以使用array_walk实现这一点,但我认为这种简单的方法更具可读性

如果您坚持使用数组\过滤器+数组\值+在\数组中执行以下操作:


您可以查看有关筛选键的更多信息

最小循环是简单的-1。作为:

foreach($arr1 as $k) {
    $res[] = $arr2[$k];
}
您可以使用array_walk实现这一点,但我认为这种简单的方法更具可读性

如果您坚持使用数组\过滤器+数组\值+在\数组中执行以下操作:


有关筛选键的详细信息,请参见。要纯使用数组函数执行此操作,可以按以下方式执行

print_r(array_intersect_key($arr2, array_flip($arr1) ));
因此,array\u flip将要形成数组的项转换为$arr1的键,然后使用array\u intersect\u键将键与主数组和新创建的数组匹配

Array
(
    [1] => foo
    [3] => foo20
    [8] => foo02
    [12] => foo39
    [23] => foo91
)
如果不需要这些键,请在其余调用周围添加数组_值

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

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

尽管如前所述,有时一个简单的foreach也一样好,有时更好。

要完全使用数组函数,您可以按以下方式进行操作

print_r(array_intersect_key($arr2, array_flip($arr1) ));
因此,array\u flip将要形成数组的项转换为$arr1的键,然后使用array\u intersect\u键将键与主数组和新创建的数组匹配

Array
(
    [1] => foo
    [3] => foo20
    [8] => foo02
    [12] => foo39
    [23] => foo91
)
如果不需要这些键,请在其余调用周围添加数组_值

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

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

尽管如前所述,有时一个简单的foreach同样好,有时更好。

无论你是否能看到“循环”,它们都会出现。因此,如果没有“循环”,这是不可能做到的。无论你是否能看到“循环”,它们都会在那里。因此,如果没有某种“循环”,这是不可能的。我同意这种观点。我同意这种观点。