首页 > 解决方案 > PHP使用数组值匹配另一个数组的键,然后将值提取到新数组中

问题描述

$encoding = [0 => 'X', 1 => 'K', 2 => 'L', 3 => 'R', 4 => 'B'];

$digits = [1, 1, 4, 2];

// result should then equal ['K', 'K', 'B', 'L']

我可以使用 foreach 循环轻松完成此操作并推入一个新数组。

$encoding = [0 => 'X', 1 => 'K', 2 => 'L', 3 => 'R', 4 => 'B'];
$digits = [1, 1, 4, 2];
$result = [];

foreach($digits as $digit) {
    $result[] = $encoding[$digit];
}

但是我找不到 php 中是否有一个内置的函数来处理这个或者一个可以做到这一点的辅助函数库?

我还希望它能够进行逆运算并将值解码回其数字。

标签: phparrays

解决方案


一种可能性是使用array_map

$encoded = array_map(function ($v) use ($encoding) { return $encoding[$v]; }, $value);

输出:

Array ( [0] => K [1] => K [2] => B [3] => L )

要解码结果,您可以array_map再次使用,这次使用array_search来查找要返回的适当键值:

$decoded = array_map(function ($v) use ($encoding) { return array_search($v, $encoding);}, $encoded);

或者正如@Barmar 所建议的那样,这可能更有效:

$encoding_f = array_flip($encoding);
$decoded = array_map(function ($v) use ($encoding_f) { return $encoding_f[$v];}, $encoded);

输出:

Array ( [0] => 1 [1] => 1 [2] => 4 [3] => 2 )

推荐阅读