【问题标题】:PHP Average of subkeys in an arrayPHP 数组中子键的平均值
【发布时间】:2014-08-05 00:24:27
【问题描述】:
Array (
  [JohnDoe] => Array (
  [id] => 23
  [name] => JohnDoe
  [logintimes] => 30
)
 [JaneDoe] => Array (
  [id] => 26
  [name] => JaneDoe
  [logintimes] => 9
)
 [Smith] => Array (
  [id] => 35
  [name] => Smith
  [logintimes] => 9
 )
)

如何将登录时间相加(然后找到它们的平均值?)

【问题讨论】:

    标签: php arrays associative-array


    【解决方案1】:

    很容易循环并得到它

    $counter = 0;
    $total = 0;
    foreach($array as $row) {
        $counter++;
        $total += $row['logintimes'];
    }
    echo $total / $counter;
    

    【讨论】:

      【解决方案2】:

      您也可以使用array_sumarray_map 来做到这一点:

      $sum = array_sum(array_map(function($item) { 
          return $item['logintimes']; 
      }, $your_array));
      
      echo $sum / count ($your_array);
      

      【讨论】:

        【解决方案3】:

        为了完整起见,PHP >= 5.5.0:

        $average = array_sum(array_column($array, 'logintimes')) / count($array);
        

        【讨论】:

          【解决方案4】:

          您必须遍历数组,并使用子数组引用来合计 logintimes 值。完成后,您只需将 logintimes 的总数除以数组项的数量即可。

          示例:

          <?php
          $users = array(
              "JohnDoe" => array(
                  "id" => 23,
                  "name" => "JohnDoe",
                  "logintimes" => 30
              ),
              "JaneDoe" => array(
                  "id" => 23,
                  "name" => "JaneDoe",
                  "logintimes" => 9
              ),
              "Smith" => array(
                  "id" => 35,
                  "name" => "Smith",
                  "logintimes" => 9
              )
          );
          
          $count = 0;
          $total = 0;
          foreach($users as $user => $values) {
              $count++;
              $total += $values['logintimes'];
          }
          $average = $total / $count;
          
          echo $average;  //Output 16
          

          工作示例:http://codepad.org/uHpJnODv

          【讨论】:

            【解决方案5】:

            认为这个解决方案应该更高效(PHP 5.5+):

             <?php
            $users = array(
                "JohnDoe" => array(
                    "id" => 23,
                    "name" => "JohnDoe",
                    "logintimes" => 30
                ),
                "JaneDoe" => array(
                    "id" => 23,
                    "name" => "JaneDoe",
                    "logintimes" => 9
                ),
                "Smith" => array(
                    "id" => 35,
                    "name" => "Smith",
                    "logintimes" => 9
                )
            );
            
            $count = count($users);
            $average = array_column($users , 'logintimes') / $count;
            
            echo $average;  //Output 16
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-08-30
              相关资源
              最近更新 更多