简体   繁体   English

计算匹配的数组值

[英]Count matching array values

I'm currently developing a PHP leaderboard, which lists the most popular/matching locations in descending order (High to Low). 我目前正在开发一个PHP排行榜,该排行榜以降序(从高到低)列出最受欢迎/最匹配的位置。

I'm able to display the locations, but unable to group/match the locations and display in the high to low order. 我可以显示位置,但是无法对位置进行分组/匹配,也不能以高到低的顺序显示。

Could somebody please advice on how todo this, thank you. 有人可以建议如何做,谢谢。

PHP: PHP:

function parse_csv($file, $options = null) {
  $delimiter = empty($options['delimiter']) ? "," : $options['delimiter'];
  $to_object = empty($options['to_object']) ? false : true;
  $str = file_get_contents($file);
  $lines = explode("\n", $str);
  $field_names = explode($delimiter, array_shift($lines));
  foreach ($lines as $line) {
    if (empty($line)) continue;
    $fields = explode($delimiter, $line);
    $_res = $to_object ? new stdClass : array();
    foreach ($field_names as $key => $f) {
      if ($to_object) {
        $_res->{$f} = $fields[$key];
      } else {
        $_res[$f] = $fields[$key];
      }
    }
    $res[] = $_res;
  }
  return $res;
}
$arr_csv = parse_csv("/data.csv");
$array = array();
for ($i = 0; $i < count($arr_csv); ++$i) {
  array_push($array, $arr_csv[$i]["Location Name"]);
}
echo '<pre>';
print_r($array);
echo '</pre>';

Array: 数组:

Array
(
    [0] => Bedford Sixth Form
    [1] => Tokko Youth Space
    [2] => WS Training
    [3] => WS Training
    [4] => University Technical College
    [5] => Bedford Academy
    [6] => Bedford College
    [7] => Bedford College
    [8] => Bedford College
    [9] => Bedford College
    [10] => Bedford College
    [11] => Bedford College
    [12] => Bedford College
    [13] => Bedford College
    [14] => Bedford College
    [15] => Bedford College
    [16] => Bedford College
    [17] => Bedford College
    [18] => Bedford College
    [19] => Bedford College
    [20] => Bedford College
)

You can use array_count_values ( $array ) 您可以使用array_count_values($ array)

$your_result =  array_count_values($your_array);

var_dump($your_result);
$array = array();
for ($i = 0; $i < count($arr_csv); ++$i) {
    if(!isset($array[$arr_csv[$i]["Location Name"]])){
        $array[$arr_csv[$i]["Location Name"]]=0;
    }
    $array[$arr_csv[$i]["Location Name"]]++;
}
asort($array);
$tmp=array();
foreach($array as $k=>$v){
   $tmp[]="$v. $k";
}
$array=$tmp;//or with array_reverse($tmp);

您可以使用array_count_values()来获取事件,并使用此信息以所需的方式对值进行排序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM