我的任务是计算数组的平均值。
$arrayToTest = [[[1], 1], [[1,3,5,7], 4], [[2,5,4,1,2,3], 2.8],
[[-1,-1,-1,-1,-1], -1], [[4,23,84,12,76,34,-7,-23], 25.375]];
从内部数组开始,对于example [1,3,5,7]
,期望值为4。
我必须使用一个函数,我试过这个:
function arrayAverage ($arrayToTest)
{
foreach($arrayToTest as $case)
foreach ($case as $item)
{
$arraySum = array_sum($item);
$arrayCount = array_count_values($item);
$average = $arraySum / $arrayCount;
return $average;
}
}
但它不起作用。我觉得我在调用内部数组时做错了。
答案 0 :(得分:0)
如果您的数组包含索引0中的内部数组,则可以通过以下方式执行此操作:
function arrayAvarage ($arrayToTest)
{
$out_put_arr = array();
foreach($arrayToTest as $case)
{
$arraySum = array_sum($case[0]);
$arrayCount = array_count_values($case[0]);
$avarage = $arraySum / $arrayCount;
$out_put_arr[]= $avarage;
}
return $out_put_arr;
}
所以主数组的循环,主数组中的每个项都会给你数组,而int $ case [0] = [1,3,5,7]
和$ case [1] = 4
,还有你不应该返回for循环,因为这将仅返回第一个平均值。所以你可以声明新数组来填充所有平均值。
答案 1 :(得分:0)
function average($array){
return array_sum($array) / count($array);
}
foreach($arrayToTest as $array){
echo "Average: " . average($array[0]);
}
答案 2 :(得分:0)
您应该查看 $ case 数组的第一个元素,该数组是包含值的数组所在的实际位置。请注意,您还可以使用 array_sum 函数。
另外,你不应该return
就是这样,因为这会中断函数做更多的事情。所以,当你真的想要这样做时,只有return
。
由于您已经有了预期值,我认为您的函数没有理由再次返回这些平均值。相反,它可以验证这些预期值的正确性,并在该比较失败时返回数组的索引。
function arrayAverage ($arrayToTest)
{
foreach($arrayToTest as $index => $case) {
$average = array_sum($case[0]) / count($case[0]);
if ($average !== $case[1]) {
return $index; // not expected value
}
}
return false; // all averages are equal to expected value
}
因此,当所有平均值都符合预期时,上述函数将返回 FALSE 。否则它将返回第一个不匹配的索引。
答案 3 :(得分:0)
<?php
$arrayToTest = array (
array(
array(1),
1
),
array(
array(1,3,5,7),
4
),
array(
array(2,5,4,1,2,3),
2.8
),
array(
array(-1,-1,-1,-1,-1),
-1
),
array(
array(4,23,84,12,76,34,-7,-23),
25.375
)
);
echo '<pre>'; print_r($arrayToTest); echo '</pre>';
$average = arrayAvarage ($arrayToTest);
echo '<pre>'; print_r($average); echo '</pre>';
function arrayAvarage ($arrayToTest) {
$result = array();
foreach($arrayToTest as $case) {
foreach ($case as $items) {
if (!is_array($items)) continue;
$result[] = array_sum($items) / count($items);
}
}
return $result;
}
?>
Array
(
[0] => 1
[1] => 4
[2] => 2.8333333333333
[3] => -1
[4] => 25.375
)