Php 一步完成数组计数、求和和和顺序

Php 一步完成数组计数、求和和和顺序,php,arrays,Php,Arrays,我有一个表示足球比赛“结果”的数组(team1——用数字表示的名称和team1_积分,表示该队从这场比赛中获得的分数(3分表示胜利,1分表示平局,0分表示失败) 代码如下: array (size=9) 0 => array (size=2) 'team1' => string '2' (length=1) 'team1_points' => string '0' (length=1) 1 => array (siz

我有一个表示足球比赛“结果”的数组(team1——用数字表示的名称和team1_积分,表示该队从这场比赛中获得的分数(3分表示胜利,1分表示平局,0分表示失败)

代码如下:

  array (size=9)
  0 => 
    array (size=2)
      'team1' => string '2' (length=1)
      'team1_points' => string '0' (length=1)
  1 => 
    array (size=2)
      'team1' => string '2' (length=1)
      'team1_points' => string '0' (length=1)
  2 => 
    array (size=2)
      'team1' => string '2' (length=1)
      'team1_points' => string '0' (length=1)
  3 => 
    array (size=2)
      'team1' => string '14' (length=2)
      'team1_points' => string '0' (length=1)
  4 => 
    array (size=2)
      'team1' => string '14' (length=2)
      'team1_points' => string '3' (length=1)
  5 => 
    array (size=2)
      'team1' => string '1' (length=1)
      'team1_points' => string '3' (length=1)
  6 => 
    array (size=2)
      'team1' => string '13' (length=2)
      'team1_points' => string '1' (length=1)
  7 => 
    array (size=2)
      'team1' => string '5' (length=1)
      'team1_points' => string '1' (length=1)
  8 => 
    array (size=2)
      'team1' => string '7' (length=1)
      'team1_points' => string '0' (length=1)
正如您所看到的,一些团队1正在重复,例如'team1'=>'2'是否有3次,id=“14”的团队是否有2次'team1'=>'14'

我需要根据team1列对相同的团队进行分组(具有相同id的团队,例如2或14等,并创建一个新的别名列,名为team_1_出现次数tht将保存数组中该团队的数量,以及一个列,例如team1_总积分,该列将汇总所有team1_积分(3,1或0)

然后按团队订购1\u总积分\u列描述

所以,最后我需要这样的东西:

team1 | team1_occurrences | team1_total_points
----------------------------------------------
14    | 2                 | 3
----------------------------------------------
2     | 3                 | 0

我从while循环创建的数组只包含两列team1team1\u points(结果是问题开头的var\u转储:

$matches_array[] = array(
     'team1'=> $team_1_id,
     'team1_points'=> $team1_points
);
我想我需要以某种方式使用php函数数组\u计数\u值并创建一个新列,但我不知道如何创建

提前感谢您提供解决此问题的建议。

您可以试试

$array = array(
        0 => array('team1' => '2','team1_points' => '1'),
        1 => array('team1' => '2','team1_points' => '1'),
        2 => array('team1' => '2','team1_points' => '0'),
        3 => array('team1' => '14','team1_points' => '0'),
        4 => array('team1' => '14','team1_points' => '3'),
        5 => array('team1' => '1','team1_points' => '3'),
        6 => array('team1' => '13','team1_points' => '1'),
        7 => array('team1' => '5','team1_points' => '1'),
        8 => array('team1' => '7','team1_points' => '1'));



$list = array();

array_map(function($var){}, $array);
foreach ( $array as $value ) {
    $key = $value['team1'];

    if (array_key_exists($key, $list)) {
        $list[$key]['team1_points'] += $value['team1_points'];
        $list[$key]['team_1_occurrences'] ++;
    } else {
        $list[$key] = $value;
        $list[$key]['team_1_occurrences'] = 1;
    }
}

usort($list ,function($a, $b){ $a = $a['team1_points'] ; $b = $b['team1_points'] ; return ($a == $b) ? 0 : (($a < $b) ? 1 : -1 ) ;});
var_dump($list);

现在,你这样做有什么问题吗?等等,我会用我当前的代码更新我的问题,让它更清楚。再说一遍,问题是什么?还有,你是从数据库获取数据吗?如果是这样,那么在数据库级做这些事情会更容易,也更有效。好的,更新了。我的问题是我不知道acc应该使用哪些函数完成我需要的。因此,我在这里征求一些建议。不,我正在为WP使用pods框架,它们有一个bug,所以我不能使用count或sum,因为它总是在t.prefix等前面加前缀。说来话长。我现在需要使用数组来绕过它。@Derfder如果您需要任何改进,请告诉我。到目前为止,它似乎有效。我认为例如,“team\u 1\u事件数”=>int 0应该是“team\u 1\u事件数”=>int 1。您认为为每个事件添加1可以解决问题吗?更新的代码给了我一个错误:警告:array\u key\u exists()期望参数2为array:(.有什么建议如何修复它吗?不管怎样,我忘了包含$list-array();现在它可以工作了。但是,如何根据点而不是发生次数对其进行排序,有时在变量转储中,它是'team1_points'=>string'3'(长度=1),有时只是'team1_points'=>int 3。为什么?
array
  0 => 
    array
      'team1' => string '14' (length=2)
      'team1_points' => int 3
      'team_1_occurrences' => int 2
  1 => 
    array
      'team1' => string '1' (length=1)
      'team1_points' => string '3' (length=1)
      'team_1_occurrences' => int 1
  2 => 
    array
      'team1' => string '2' (length=1)
      'team1_points' => int 2
      'team_1_occurrences' => int 3
  3 => 
    array
      'team1' => string '7' (length=1)
      'team1_points' => string '1' (length=1)
      'team_1_occurrences' => int 1
  4 => 
    array
      'team1' => string '13' (length=2)
      'team1_points' => string '1' (length=1)
      'team_1_occurrences' => int 1
  5 => 
    array
      'team1' => string '5' (length=1)
      'team1_points' => string '1' (length=1)
      'team_1_occurrences' => int 1
function cmp_by_teampoints($a, $b) {
        return $b["points"] - $a["points"] ;
}

$mr = array(
    array('team1' => '2','team1_points' => '1'),
    array('team1' => '2','team1_points' => '1'),
    array('team1' => '2','team1_points' => '0'),
    array('team1' => '14','team1_points' => '0'),
    array('team1' => '14','team1_points' => '3'),
    array('team1' => '1','team1_points' => '3'),
    array('team1' => '13','team1_points' => '1'),
    array('team1' => '5','team1_points' => '1'),
    array('team1' => '7','team1_points' => '1'));
$s = array();
foreach ($mr as $t => $r) {
    $key = $r['team1'];
    if(!isset($s[$key])) {
        $s[$key]['team']=$key;
        $s[$key]['points']+=$r['team1_points'];
        $s[$key]['occurrence']=1;
    }
    else {
        $s[$key]['points']+=$r['team1_points'];
        $s[$key]['occurrence']++;
    }
}

usort($s, "cmp_by_teampoints");