【问题标题】:How to add the key values of the dynamically generated array and get their average?如何将动态生成的数组的键值相加并得到它们的平均值?
【发布时间】:2018-04-15 15:15:13
【问题描述】:

我正在为每个循环生成一个值数组。结果看起来有点像我在下面粘贴的数组值。现在我想添加三个迭代的相应值并得到它们的平均值......就像我想要的第 0 个键 - (87+95.2+100)/3 ... 像这样我想要所有的值.. 如何我该怎么做?

这是代码。 $items 包含我在下面粘贴的这些数组值。每个循环有两个,我必须想办法获得平均值。

foreach ($data['data'] as $k => $v) 
   {
     $items = array();
      foreach ($data['departments'] as $a => $b) 
      {
        $items[] = $v['departments'][$a]['score'];
   }
   }
   echo "<pre>";
   print_r($items);
   echo "</pre>";

当我打印出来时,$items 包含以下内容

    Array
(
    [0] => 87
    [1] => 88.90000000000001
    [2] => 97.40000000000001
    [3] => 27.4
    [4] => 94.7
    [5] => 91.7
    [6] => 93.90000000000001
    [7] => 100
    [8] => 0
    [9] => 100
    [10] => 94.40000000000001
    [11] => 90
    [12] => 100
    [13] => 78.59999999999999
    [14] => 63.3
    [15] => 97.40000000000001
    [16] => 96.90000000000001
    [17] => 97
)
Array
(
    [0] => 95.2
    [1] => 94.7
    [2] => 95
    [3] => 33.6
    [4] => 94.8
    [5] => 100
    [6] => 92.3
    [7] => 78.59999999999999
    [8] => 92.3
    [9] => 96.40000000000001
    [10] => 92.5
    [11] => 100
    [12] => 96.3
    [13] => 84.09999999999999
    [14] => 63
    [15] => 97.7
    [16] => 94.3
    [17] => 97.09999999999999
)
Array
(
    [0] => 100
    [1] => 95
    [2] => 91.90000000000001
    [3] => 33.6
    [4] => 98.2
    [5] => 96.3
    [6] => 97.90000000000001
    [7] => 86.7
    [8] => 91.7
    [9] => 96.59999999999999
    [10] => 92.5
    [11] => 100
    [12] => 92.3
    [13] => 83.3
    [14] => 63.6
    [15] => 92.90000000000001
    [16] => 94.40000000000001
    [17] => 98.59999999999999
)

【问题讨论】:

    标签: php arrays foreach array-push


    【解决方案1】:
    <?php
    $items = array();
    foreach ($data['data'] as $k => $v)  {
        foreach ($data['departments'] as $a => $b) {
            $items[$k][] = $v['departments'][$a]['score'];
        }
    }
    
    $res = array_map('average', zip($items));
    
    var_dump($res);
    
    function zip($arrays) {
        $zip = [];
        if ($arrays) {
            $count = count(current($arrays));
            for ($i = 0; $i < $count; $i++) {
                foreach ($arrays as $array) {
                    $zip[$i][] = $array[$i];
                }
            }
        }
        return $zip;
    }
    
    function average($numbers) {
        return array_sum($numbers) / count($numbers);
    }
    

    【讨论】:

    • 感谢您的回复。但是这三个迭代是动态生成的,并且在一个变量中,而不是分成三个不同的变量。它们就是这样,没有任何分隔。我刚刚缩短了数组值。实际的数组列表在主要问题中。再次感谢您 Array ( [0] => 87 [1] => 88.90000000000001 [2] => 97.40000000000001 [3] => 27.4 ) Array ( [0] => 95.2 [1] => 94.7 [2] => 95 [3] => 33.6 ) 数组 ( [0] => 100 [1] => 95 [2] => 91.90000000000001 [3] => 33.6 )
    • 你好,不分开是什么意思,但是为什么要放入3个数组呢?您能否显示包含值的数组的var_dumpprint_r(更新您的答案)?
    • 当我执行 print_r($items) 时,它会显示我告诉你的数组输出。当我执行 print_r 时,这又是输出。数组 ( [0] => 87 [1] => 88.90000000000001 [2] => 97.40000000000001 [3] => 27.4 ) 数组 ( [0] => 95.2 [1] => 94.7 [2] => 95 [3] => 33.6 ) 数组 ( [0] => 100 [1] => 95 [2] => 91.90000000000001 [3] => 33.6 )
    • 好的,你能把 $dataprint_r 放在一个 $data 上,除非我很难得到一个有效的结果。
    • 好吧,我不知道$data 中的内容,但如果您需要,请查看答案的更新。
    猜你喜欢
    • 2020-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多