Объединение двух массивов на основе значений переполнения стека

Мне было интересно, как можно выполнить функцию для каждого элемента массива в зависимости от значения.

Например, если у меня есть два массива:

[
0 =>  'gp',
1 =>  'mnp',
2 =>  'pl',
3 =>  'reg'
]

А также

$translation = [
'gp' => 'One',
'mnp' => 'Two',
'pl' => 'Three',
'reg' => 'Four',
'other' => 'Five',
'fs' => 'Six'
];

Как я могу получить

    [
0 =>  'One',
1 =>  'Two',
2 =>  'Three',
3 =>  'Four'
]

?

Мне удалось с foreach, но я считаю, что есть несколько более эффективных способов сделать это. Я пытался поиграть с array_walk а также array_map, но не понимаю. 🙁

0

Решение

<?php

$arr = [
0 =>  'gp',
1 =>  'mnp',
2 =>  'pl',
3 =>  'reg'
];

$translation = [
'gp' => 'One',
'mnp' => 'Two',
'pl' => 'Three',
'reg' => 'Four',
'other' => 'Five',
'fs' => 'Six'
];

$output = array_map(function($value)use($translation){
return $translation[$value];
}, $arr);

print_r($output);

Выход:

Array
(
[0] => One
[1] => Two
[2] => Three
[3] => Four
)
0

Другие решения

<?php
$data = array('gp','mnp','pl','reg');
$translation = array( 'gp' => 'One','mnp' => 'Two','pl' => 'Three','reg' => 'Four','other' => 'Five','fs' => 'Six');
$new  = array_flip($data);// chnage key value pair
$newArr = array();
foreach($new as $key=>$value){
$newArr[]= $translation[$key];
}

echo "<pre>";print_r($newArr);
0

$toto1 = [
0 =>  'gp',
1 =>  'mnp',
2 =>  'pl',
3 =>  'reg'
];

$toto2 = [
'gp' => 'One',
'mnp' => 'Two',
'pl' => 'Three',
'reg' => 'Four',
'other' => 'Five',
'fs' => 'Six'
];

$result = array_slice(array_merge(array_values($toto2), $toto1), 0, count($toto1));
0

Объедините ключи и значения этих массивов, используя array_combine-

$sliced_array = array_slice($translation, 0, count(array1));

array_combine(array_keys($array1), array_values($sliced_array));

1-й параметр дает ключи массивов, а второй выводит значения. Наконец объедините это с array_combine.

0