Массив объединить, если ключ похож на ключ

1

Существует определенный массив и массив для отображения. То, что я пытаюсь получить, - это если ключи от данного похожи на ключ с карты, я бы хотел, чтобы ключ от него стал значением из карты.

Пример: данный массив выглядит следующим образом:

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

Теги:
arrays
sorting

3 ответа

1
Лучший ответ

Вы можете просто использовать 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);

демонстрация

3

Вы можете попробовать следующий код

$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;
2

Мне пришлось исправить второй аргумент, потому что array_combine не проверяет ключи (только для заказа), поэтому при разных порядках ключа он начинает становиться уродливым:

$result = array_combine($mapx = array_intersect_key($map, $given), array_replace($mapx, $given));
  • 0
    спасибо за ваше время и ответ! Да, я видел в первом примере через некоторое время, что он тормозит .. теперь он начинает усложняться .. но спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню