Warning: Undefined array key 0 in /in/E783F on line 20
Warning: Undefined array key 1 in /in/E783F on line 20
Warning: Undefined array key 2 in /in/E783F on line 20
Warning: Undefined array key 3 in /in/E783F on line 20
<pre>array(4) {
[0]=>
float(3)
[1]=>
float(6)
[2]=>
float(10)
[3]=>
float(5.333333333333333)
}
# Function takes in unlimited arrays,
# and returns the average of each index of
# those arrays as a new array.
function arrayAverage(...$array){
# Loop through the arrays in the input arguments.
# For every array, extract all numeric values from each
# element, and group them by index in a temporary
# multi-dimensional array. If a value is null, or
# cannot be converted into an integer/float, skip it.
foreach($array as $arr){
for($i = 0; $i < count($arr); $i++){
if(!is_null($arr[$i]) && ($arr[$i] == (int)$arr[$i]))
$temparr[$i][] = (int)$arr[$i];
elseif(!is_null($arr[$i]) && ($arr[$i] == (float)$arr[$i]))
$temparr[$i][] = (float)$arr[$i];
}
}
# Loop through the multi-dimensional array, and calculate the average
# of each sub-array. Store each result in a separate array to be
# returned after the loop is finished.
for($j = 0; $j < count($temparr); $j++)
$averages[] = array_sum($temparr[$j]) / count($temparr[$j]);
# Return aforementioned array containing the averages.
return $averages;
}
用法/示例:
# Arrays can have a different amount of key=>value pairs,
# and integer values stored as strings can be parsed,
# as shown in "$array2".
$array1 = array(0, 7, 5, 0);
$array2 = array(2, 6, 10, 0, "100");
$array3 = array(4, 8, 15, 10);
$array4 = array(6, 7, 20, 10);
# Example on how to skip values just in case the need arises
# (So averages won't be affected by having an extra number)
$array5 = array(null, null, null, null, 300);
$averages = arrayAverage($array1, $array2, $array3, $array4, $array5);
print_r($averages);
5条答案
按热度按时间0s7z1bwu1#
对于更动态的用法,例如6个数组或更多,您可以使用以下代码:
输出:(Demo)
g0czyy6m2#
* 全动态功能:*
我承担了构建一个完全动态的函数的任务,在这个函数中,你可以输入任意多的数组,我还添加了一个
null
检查,如下面的例子所示,以防你需要跳过数组中的值。功能:
用法/示例:
输出:
实时沙盒演示:
https://onlinephp.io/c/bb513
xpszyzbs3#
这是一个简单的解决方案,但你可以进一步推广它,使其通用,但它现在将工作。它可以相应地更新:
注意:假设数组的计数与您提到的相同
7xzttuei4#
另一种方法:
工作example。
nxagd54h5#
对于一个简洁的函数式代码片段,可以使用
array_map()
来"转置"数据行,这意味着数据列将被传递给自定义函数,然后执行平均值计算。代码:(Demo)
输出:
注意,当数组长度不完全相同时,此技术将用
null
(计为0
)填充列中的间隙:Demo.如果输入数组是一个多维数组,可以使用spread操作符将其解包为
array_map()
。要防止
null
值扭曲计算,请在计算之前过滤它们:Demo.