【问题标题】:Get averages of values from multidimensional array where date key's match?从日期键匹配的多维数组中获取值的平均值?
【发布时间】:2013-09-17 15:02:02
【问题描述】:

我有以下多维数组,

Array
(
    [0] => Array
        (
            [place] => 1
            [date] => 2013-01-01
        )

    [1] => Array
        (
            [place] => 2
            [date] => 2013-01-02
        )

    [2] => Array
        (
            [place] => 3
            [date] => 2013-01-03
        )

    [3] => Array
        (
            [place] => 10
            [date] => 2013-01-01
        )

    [4] => Array
        (
            [place] => 8
            [date] => 2013-01-02
        )

    [5] => Array
        (
            [place] => 5
            [date] => 2013-01-03
        )

)

如何获得日期匹配的每个数组的平均位置,以便输出数组看起来像?我能做的最多的是遍历数组以提取日期,这很容易,但是找到匹配项并获得平均值超出了我的范围。提前致谢。

Array
(
    [0] => Array
        (
            [place] => 5.5
            [date] => 2013-01-01
        )

    [1] => Array
        (
            [place] => 5
            [date] => 2013-01-02
        )

    [2] => Array
        (
            [place] => 6.5
            [date] => 2013-01-03
        )

)

【问题讨论】:

    标签: php arrays for-loop foreach average


    【解决方案1】:
    $input = array(
        array('place' => 1, 'date' => '2013-01-01'),
        array('place' => 2, 'date' => '2013-01-02'),
        array('place' => 3, 'date' => '2013-01-01'),
    );
    foreach($input as $pair) $tmp[$pair['date']][] = $pair['place'];
    foreach($tmp as $key => $value){
        $result[] = array('place' => array_sum($value) / count($value), 'date' => $key);
    }
    //var_dump($result);
    

    结果:

    array (size=2)
      0 => 
        array (size=2)
          'place' => int 2
          'date' => string '2013-01-01' (length=10)
      1 => 
        array (size=2)
          'place' => int 2
          'date' => string '2013-01-02' (length=10)
    

    【讨论】:

      【解决方案2】:

      您可以将输入数组解析为一个数组,其中键是日期,值是该日期的地点数组:

      $tmp = array();
      foreach( $input as $entry  ) {
          $date = $entry["date"];
      
          if( !array_key_exists( $date, $tmp ) ) {
              $tmp[$date] = array();
          }
      
          $tmp[$date][] = $entry["place"];
      }
      

      现在只需检查那个临时数组,计算平均值并生成您想要的输出格式:

      $averages = array();
      foreach( $tmp as $date => $places ) {
          $sum = array_sum($places);
          $averages[] = array(
              "date" => $date,
              "place" => $sum / count($places)
          );
      }
      
      print_r($averages);
      

      【讨论】:

        猜你喜欢
        • 2023-01-27
        • 2023-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多