首页 > 解决方案 > 如何“很好地”映射 PHP 数组的键?

问题描述

我有一个从一个系统传入的键值数组,并希望将具有不同键的相同值发送到另一个系统。也就是说,我们有

$map = [
  'sys_a_1' => 'sys_b_1',
  'sys_a_2' => 'sys_b_2',
];

$data = [
  'sys_a_1' => 'data_1',
  'sys_a_2' => 'data_2',
];

我们想要

$result = [
  'sys_b_1' => 'data_1',
  'sys_b_2' => 'data_2',
];

我可以用一个循环来做到这一点:

foreach ($map as $from => $to) {
  if (!empty($data[$from])) {
    $result[$to] = $data[$from];
  }
}

但它只是惹恼了我,没有array_something()办法做到这一点。array_combine($map, array_intersect_key($data, $map)) 几乎做到了,但array_intersect_key没有重新排序,所以它会完全失控。

标签: phparraysidioms

解决方案


怎么样array_combine()

<?php
$map = [
  'sys_a_1' => 'sys_b_1',
  'sys_a_2' => 'sys_b_2',
];

$data = [
  'sys_a_1' => 'data_1',
  'sys_a_2' => 'data_2',
];

$result = array_combine($map,$data);
print_r($result);
?>

演示: https ://3v4l.org/C2HDV


推荐阅读