让我们说我有一个如下所示的关联数组:
$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_column
和array_combine
函数:
$keys = array_column($myAssocArray, 'Name');
$values = array_column($myAssocArray, 'Value');
$destinationArray = array_combine($keys, $values);
什么是更推荐的方法,哪种方式更高效?或者是否有更好的解决方案可用,不需要foreach循环?
答案 0 :(得分:4)
我不会看这里的表现,因为这些操作非常小。我会更专注于清洁代码方面。
第一眼看来, array_map()
解决方案难以理解。
您无需使用array_combine()
和array_column()
的双重调用。相反,您可以将第三个参数传递给array_column()
“索引键” 用作返回数组的索引/键的列。该值可以是列的整数键,也可以是字符串键名。
以下代码
array_column($myAssocArray, 'Value', 'Name')
根据需要打印相同的输出。
请记住,PHP内部可以注意并优化很多东西以提高性能。显然,当开发人员这样做时,它会更好,但有时你会因清洁代码的成本和开发人员维护该代码的头痛而获得1μs的性能。