在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()代码>