在php中使用array_map vs array_column和array_combine

时间:2018-03-15 21:22:56

标签: php laravel symfony

让我们说我有一个如下所示的关联数组:

$myAssocArray = [
[ 'Name' => 'AWS_Bucket-Name1',  'Value' => 'Bucket data',...],
[ 'Name' => 'AWS_Bucket-Name2',  'Value' => 'Bucket data',...],
[ 'Name' => 'AWS_Bucket-Name3',  'Value' => 'Bucket data',...],
[ 'Name' => 'AWS_Bucket-Name4',  'Value' => 'Bucket data',...],
];

由此我想创建一个简单的关联数组,如下所示:

[ ['AWS_Bucket-Name1' => 'Bucket data'], ['AWS_Bucket-Name2' => 'Bucket data'], ...]

所以我可以采取两种方法来解决这个问题:

(1)在php中使用array_map函数:

$destinationArray = array_map('myMapFunction', $myAssocArray);

function myMapFunction($entity): array {
   if (is_array($entity) && isset($entity['Name'], $entity['Value'])) {
      return [$entity['Name'] => $entity['Value']];
    }
}

OR

(2)使用array_columnarray_combine函数:

$keys = array_column($myAssocArray, 'Name');
$values = array_column($myAssocArray, 'Value');
$destinationArray = array_combine($keys, $values);

什么是更推荐的方法,哪种方式更高效?或者是否有更好的解决方案可用,不需要foreach循环?

1 个答案:

答案 0 :(得分:4)

我不会看这里的表现,因为这些操作非常小。我会更专注于清洁代码方面。

第一眼看来,

array_map()解决方案难以理解。

您无需使用array_combine()array_column()的双重调用。相反,您可以将第三个参数传递给array_column()

  

“索引键”   用作返回数组的索引/键的列。该值可以是列的整数键,也可以是字符串键名。

以下代码

array_column($myAssocArray, 'Value', 'Name')

根据需要打印相同的输出。

请记住,PHP内部可以注意并优化很多东西以提高性能。显然,当开发人员这样做时,它会更好,但有时你会因清洁代码的成本和开发人员维护该代码的头痛而获得1μs的性能。