【问题标题】:PHP Get duplicate values in array and average second valuePHP获取数组中的重复值和平均第二个值
【发布时间】:2017-11-19 13:50:49
【问题描述】:

我有一个如下所示的数组:

$ratingsInPosts = array
        (
        array("1",3),
        array("2",5),
        array("2",2),
        array("5",2),
        array("90",1),
        array("5",6),
        array("2",2),
        );

我想在第一列中查找重复值并从第二列中平均其值。

这样("1",3),("2",5),("2",2),("5",2),("90",1),("5",6),("2",2)

这样结束("1",3),("2",3),("5",4),("90",1)

【问题讨论】:

  • 为什么是("2",3)
  • 继续@revo 的评论,它应该是 (4+2+2)/3 = 8/3 而不是 3。
  • 抱歉,忘记编辑第一条记录,所以它是 5 而不是 4。所以 (5+2+2)/3 = 3

标签: php arrays duplicates average


【解决方案1】:

试试这个经过测试的解决方案 我得到了所需的输出

$ratingsInPosts = array
        (
        array("1",3),
        array("2",5),
        array("2",2),
        array("5",2),
        array("90",1),
        array("5",6),
        array("2",2),
        );
$arr1 = array_column($ratingsInPosts, 0);
$p = array_count_values($arr1);
foreach($p as $key => $value)
{
  $sum = 0;
  for($i=0; $i < $value; $i++)
  {
    $pos = array_search($key, $arr1);
    $sum += $ratingsInPosts[$pos][1];
    unset($arr1[$pos]);
    unset($ratingsInPosts[$pos]);
  }
  $re[] = array('"'.$key.'"',$sum/$value);
}
print_r($re);

【讨论】:

    【解决方案2】:

    希望对你有帮助:

    $groups = array();
    // in this loop we group values by first column
    foreach ($ratingsInPosts as $row) {
        $key = $row[0];
        if (!isset($groups[$key]) {
            $groups[$key] = array();
        }
        $groups[$key][] = $row[1];
    }
    $result = array();
    foreach ($groups as $key => $value) {
        $avg = array_sum($value) / count($value);
        $row = array($key, $avg);
        $result[] = $row;
    }
    

    【讨论】:

      【解决方案3】:
      <?php
      header('Content-Type: text/plain');
      $ratingsInPosts = array(array("1",3),array("2",5),array("2",2),array("5",2),array("90",1),array("5",6),array("2",2));
      
      
      $result = array();    
      $output = array();    
      foreach($ratingsInPosts as $array){  
        $result[$array[0]][] = $array[1];
      }
      foreach($result as $key=>$array){
        $output[] = array($key,round(array_sum($array)/count($array)));
      }
      
      
      var_export($output);
      ?>
      

      【讨论】:

        猜你喜欢
        • 2013-11-28
        • 2023-01-27
        • 2016-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        相关资源
        最近更新 更多