Существует определенный массив и массив для отображения. То, что я пытаюсь получить, - это если ключи от данного похожи на ключ с карты, я бы хотел, чтобы ключ от него стал значением из карты.
Пример: данный массив выглядит следующим образом:
given array (size=2)
'status' => string '200' (length=3) ------------
'user' => string 'roger' (length=5) -------- |
| |
| |
| |
map array (size=6) | |
'date' => string 'date' (length=4) | |
'user' => string 'username' (length=8) -------- |
'status' => string 'response_code' (length=13) -----
'url' => string 'url' (length=3)
'method' => string 'method' (length=6)
'ip' => string 'remote_address' (length=14)
desired_result array (size=2)
'response_code' => string '200' (length=3)
'username' => string 'roger' (length=5)
Посмотрите, как status
(из заданного массива) становится response_code
и user
становится username
Вы можете просто использовать array_walk
как
$result = [];
array_walk($given_array,function($v,$k)use(&$result,$map_array){
$result[$map_array[$k]] = $v;
});
print_r($result);
Вывод:
Array
(
[response_code] => 200
[username] => roger
)
Или проще использовать цикл foreach
$result=[];
foreach($given_array as $key => $value){
$result[$map_array[$key]] = $value;
}
print_r($result);
Вы можете попробовать следующий код
$given_array = [
'status' => '200',
'user' => 'roger'
];
$map_array = [
'date' => 'date',
'user' => 'username',
'status' => 'response_code',
'url' => 'url',
'method' => 'method',
'ip' => 'remote_address'
];
$desired_array = [];
foreach($map_array as $key => $value)
{
if(array_key_exists($key, $given_array))
{
$desired_array[$value] = $given_array[$key];
}
}
return $desired_array;
Мне пришлось исправить второй аргумент, потому что array_combine
не проверяет ключи (только для заказа), поэтому при разных порядках ключа он начинает становиться уродливым:
$result = array_combine($mapx = array_intersect_key($map, $given), array_replace($mapx, $given));