在 php 中使用 array_map vs array_column 和 array_combine

And*_*ndy 1 php symfony laravel

假设我有一个如下所示的关联数组:

$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',...],
];
Run Code Online (Sandbox Code Playgroud)

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

[ ['AWS_Bucket-Name1' => 'Bucket data'], ['AWS_Bucket-Name2' => 'Bucket data'], ...]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

或者

(2) 用途array_columnarray_combine作用:

$keys = array_column($myAssocArray, 'Name');
$values = array_column($myAssocArray, 'Value');
$destinationArray = array_combine($keys, $values);
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ert 7

我不会看这里的性能,因为这些操作非常小。我会更多地关注干净的代码方面。

array_map() 乍一看,解决方案更难理解。

您不需要使用array_combine()和双重调用array_column(). 相反,你可以通过第三个参数array_column()

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

以下代码

array_column($myAssocArray, 'Value', 'Name')
Run Code Online (Sandbox Code Playgroud)

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

请记住,PHP 内部可以注意到并优化很多事情以提高性能。显然,开发人员这样做会更好,但有时您会以干净的代码和维护该代码的开发人员的头痛为代价获得 1?s 的性能。