【问题标题】:Replace array values by $replacements key/value map in PHP在 PHP 中用 $replacements 键/值映射替换数组值
【发布时间】:2018-03-19 00:20:24
【问题描述】:

我有一个带有值的(关联)数据数组$data,还有另一个关联数组$replacements

我正在寻找一种使用$replacements 数组替换$data 中值的简短、简单和快速的方法。

详细的方式是这样的:

function replace_array_values(array $data, array $replacements) {
  $result = [];
  foreach ($data as $k => $value) {
    if (array_key_exists($value, $replacements)) {
      $value = $replacements[$value];
    }
    $result[$k] = $value;
  }
  return $result;
}

有没有本地方法可以做到这一点?

我知道array_map(),但也许有更快的方法,每个项目都不需要额外的函数调用?

示例:

https://3v4l.org/g0sIJ

$data = array(
  'a' => 'A',
  'b' => 'B',
  'c' => 'C',
  'd' => 'D',
);

$replacements = array(
  'B' => '(B)',
  'D' => '(D)',
);

$expected_result = array(
  'a' => 'A',
  'b' => '(B)',
  'c' => 'C',
  'd' => '(D)',
);

assert($expected_result === replace_array_values($data, $replacements));

【问题讨论】:

  • 你能举一个$data$replacements和预期输出的例子吗?

标签: php


【解决方案1】:

我能想到的最简单/最不冗长的方式:

return array_map(function($value) use ($replacements) {
  return array_key_exists($value, $replacements) ? $replacements[$value] : $value;
}, $data);

使用array_map 基本上只是在数组上循环,任何其他基本函数也必须这样做。

【讨论】:

  • array_map() 为每次迭代调用一个函数,这会增加一些开销(会好奇多少)。不过,这仍然是一个正确的答案。
  • @donquixote 我怀疑这会很重要,但我可能错了。也许你可以运行一些基准测试。
  • 如果你有一个数据处理算法,这被称为很多,那么我打赌它会很重要。
  • 或者如果数组真的很大。
【解决方案2】:

你可以试试array_replace

【讨论】:

  • array_replace 根据它们的索引替换值,OP 希望根据它们的值替换它们(除非我误解了)。
猜你喜欢
  • 2021-02-08
  • 1970-01-01
  • 2018-05-22
  • 2012-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2021-09-23
相关资源
最近更新 更多