【问题标题】:How to "nicely" map the keys of a PHP array?如何“很好地”映射 PHP 数组的键?
【发布时间】:2020-07-13 23:25:16
【问题描述】:

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

$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 没有重新排序,所以它会完全不正常。

【问题讨论】:

  • 我建议坚持使用你的 foreach 循环。
  • 除非您的 $data 值保证不是空字符串或 0 或 false 或 null,否则我会使用 isset 而不是 !empty

标签: php arrays idioms


【解决方案1】:

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

【讨论】:

  • 这只有在每个数组中的键顺序相同时才有效:3v4l.org/2Jgsg
猜你喜欢
  • 2018-08-07
  • 2012-08-16
  • 2019-04-11
  • 2013-10-08
  • 2021-10-16
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 2012-08-14
相关资源
最近更新 更多