PHP使用数组值匹配另一个数组的键,然后将值提取到新数组中

时间:2019-02-26 01:39:31

标签: php arrays

$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中的函数来处理此问题,或者找不到可以执行此操作的辅助函数库?

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

1 个答案:

答案 0 :(得分:1)

一种可能是使用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 )