在php中使用数组映射vs数组列和数组组合

在php中使用数组映射vs数组列和数组组合,php,laravel,symfony,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',...], [ 'Na

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

$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'], ...]
由此,我想创建一个简单的关联数组,如下所示:

$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\u map
函数:

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

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

(2) 使用
array\u列
array\u组合
功能:

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

什么方法更值得推荐,哪些方法更高效?或者有没有更好的解决方案不需要foreach循环?

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

array\u map()
解决方案一看就很难理解

您不需要使用
array\u combine()
和双重调用
array\u column()
。相反,您可以将第三个参数传递给
array\u column()

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

下面的代码

array_column($myAssocArray, 'Value', 'Name')
根据需要打印相同的输出

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

  • 更多关于

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

      array\u map()
      解决方案一看就很难理解

      您不需要使用
      array\u combine()
      和双重调用
      array\u column()
      。相反,您可以将第三个参数传递给
      array\u column()

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

      下面的代码

      array_column($myAssocArray, 'Value', 'Name')
      
      根据需要打印相同的输出

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

      • 更多关于

      数组映射方法为您提供了更多处理输入数据中缺失/意外/不一致值的机会。array\u column/combine编写起来更简单,但是您会失去这种级别的控制。性能/效率将相当相似。我不认为这是一个可以通过优化获得巨大性能提升的领域。我建议将数组转换为集合,然后应用Pulk方法,而不是数组列和数组列的组合。像这样<代码>收集($myAssocArray)->pull('Value','Name')->toArray()数组映射方法为您提供了更多处理输入数据中缺失/意外/不一致值的机会。array\u column/combine编写起来更简单,但是您会失去这种级别的控制。性能/效率将相当相似。我不认为这是一个可以通过优化获得巨大性能提升的领域。我建议将数组转换为集合,然后应用Pulk方法,而不是数组列和数组列的组合。像这样<代码>收集($myAssocArray)->pull('Value','Name')->toArray()