php - PHP:聚合数组
问题描述
假设我有以下 3 个 PHP 数组:
$arr1 = [1,2,3,4]
$arr2 = [5,2,4,1]
$arr3 = [2,1,2,2]
PHP必须将这些数组添加到每个数组的相同索引中的元素的最有效的内置方式是什么。意思是,最终输出如下:
$final = [8,5,9,7]
应该有比做final = [$arr1[0]+$arr2[0]+$arr3[0]..]
等更简单的方法。另外,我需要假设数组的数量是可变的,所以像上面这样对数学进行硬编码是不正确的。
解决方案
将它们全部设为一个数组并使用 array_sum 和 array_column
$arr1 = [1,2,3,4];
$arr2 = [5,2,4,1];
$arr3 = [2,1,2,2];
$all = [$arr1, $arr2, $arr3];
foreach($all[0] as $key => $v){
$result[$key] = array_sum(array_column($all, $key));
}
var_dump($result);
输出:
array(4) {
[0]=>
int(8)
[1]=>
int(5)
[2]=>
int(9)
[3]=>
int(7)
}
此方法仅在所有数组长度相同或第一个数组最长时才有效。
如果您在名称范围内有未知数量的数组,那么您可以循环并使用 isset 查看该数组是否存在,如果存在则将其添加到 $all。
$arr1 = [1,2,3,4,5];
$arr2 = [5,2,4,1];
$arr3 = [2,1,2,2];
$arr4 = [2,1,2,2];
$all = [];
$i=1;
while(isset(${"arr" . $i})){
$all[] = ${"arr" . $i};
$i++;
}
foreach($all[0] as $key => $v){
$result[$key] = array_sum(array_column($all, $key));
}
var_dump($result);
如果您希望它全部超级动态,那么您可以使用上面的代码并添加最长的子数组并在最后一个循环中循环。
$arr1 = [1,2,3,4,5];
$arr2 = [5,2,4,1];
$arr3 = [2,1,2,2];
$arr4 = [2,1,2,2];
$arr5 = [2,1,2,2,6,1,3,2];
$all = [];
// Add all subarrays dynamically and see which is the longest
$i=1;
$count = Null;
while(isset(${"arr" . $i})){
$all[] = ${"arr" . $i};
if(count(${"arr" . $i}) > $count){
$count = count(${"arr" . $i});
$longkey = $i-1;
}
$i++;
}
// Loop the longest subarray
foreach($all[$longkey] as $key => $v){
$result[$key] = array_sum(array_column($all, $key));
}
var_dump($result);
工作示例:
https ://3v4l.org/lIVGo
推荐阅读
- javascript - 未找到模块:React 中的“D:\Learning Programming\Javascript....”错误无法解析“persons”
- javascript - 如果加载时间很长,如何中止 XMLHttpRequest?
- rust - Rust 借用检查器阻止我从迭代器返回引用
- winforms - 如何获取xrPictureBox图像URL表达式devExpress winforms的应用路径?
- c# - 如何使用 C# 中的反射调用具有多个 in\out 参数的函数而不知道它们的顺序?
- csv - NimbleCSV:长生不老药
- nexmo - 我可以从浏览器使用 nexmo 拨打电话号码吗?
- r - 提取多边形质心的坐标
- bash - 在 ubuntu 中从 octave 调用 bash 脚本的问题
- sql - 将数据从 Kafka 导入数据库