$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中的函数来处理此问题,或者找不到可以执行此操作的辅助函数库?
我还希望它能够进行逆运算并将值解码回其数字。
答案 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 )