You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从CSV文件提取含指定球队ID的主客场比赛数据

问题

我有一份记录约1700支球队足球赛事的CSV文件,包含11列数据,其中REGNUMBERHOME和REGNUMBERAWAY是主客场球队的ID字段。我已经把所有行转成数组,但当前用if(in_array($stamnr, $col)) {}只能获取该球队的主场比赛数据,想知道怎么修改代码同时获取主客场所有比赛数据。

我的PHP代码

<?php
   $reeks="";
   if(!empty($_POST['myselection'])) {
     $reeks = $_POST['myselection'];
                            
     echo "<h3><b>REEKS  "   .$reeks . "</b></h3>";

     if (($handle = fopen("test/masterfile.csv", "r")) !== FALSE) {
     while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
                                    $data =   

array_map("utf8_encode", $data); //added
$num = count($data);
                                  
for ($c=0; $c < $num; $c++) {
$matchen = array();
$col = explode(';',$data[$c]);
if(in_array($stamnr, $col)) {
  $date = str_replace('/', '-', $col[1]);
  $dag = substr($date, 0, 2);
  $maand = substr($date, 3, 2);
  $jaar = substr($date, 6, 4);
  $weekdag = getWeekDay($dag,$maand,$jaar);
  $col[1] = $weekdag."<br />". $col[1];
  $matchen = $col[0]. ', ' .$col[1]. ', ' .$col[2]. ', ' .$col[3]. ', ' .$col[4].', ' .$col[5]. ', ' .$col[6]. ', ' .$col[7];//. ', ' .$col[8]. ', ' .$col[9]. ', ' .$col[10];
$myArray = explode(',', $matchen);
if ($col[0] === $reeks) {
echo "<tr>";
$row++;
foreach($myArray as $key) {
echo "<td>". trim($key)."</td>";
  }
echo "</tr>";
 }
}
}
 

}

    }
      fclose($handle);
     }
        echo "<br /><br />";
    ?>

CSV文件部分内容

DIV;DATE;HOUR;HOME;AWAY;RH;RA;STATUS;MD;REGNUMBERHOME;REGNUMBERAWAY
W2B;03/09/2022;18:00;VV Koekelare A;V.V. Tielt ;5;0;;1;02531;00218
W2B;03/09/2022;19:00;K. Dosko Beveren ;K. FC Lissewege A;1;0;;1;04334;04718
W2B;03/09/2022;19:00;Dosko Kanegem ;K. WS Houthulst A;0;0;;1;08832;02833
W2B;04/09/2022;15:00;SV Loppem ;K.S.K. Snaaskerke ;1;1;;1;06136;06435
W2B;04/09/2022;15:00;K.FC Lichtervelde ;K. SV Bredene ;1;3;;1;04320;04460
W2B;04/09/2022;15:00;Jong Male ;Club Roeselare ;4;0;;1;07951;09360
W2B;04/09/2022;15:00;K. VC Ardooie ;K. FC Heist A;2;0;;1;04257;04465
W2B;04/09/2022;15:00;SC Lombardsijde ;K. SKV Zwevezele ;2;2;;1;05187;06039
W2B;10/09/2022;18:30;K. SKV Zwevezele ;SV Loppem ;2;0;;2;06039;06136
W2B;10/09/2022;19:00;V.V. Tielt ;Jong Male ;2;3;;2;00218;07951
W2B;11/09/2022;15:00;K. SV Bredene ;K. Dosko Beveren ;2;2;;2;04460;04334
...(剩余CSV内容省略)

测试可用ID为04334、系列为W2B的球队数据。


解决方案

核心问题排查

你的代码存在两个关键问题:

  1. CSV分隔符错误:实际用;分隔列,但fgetcsv默认按,拆分,导致行数据结构混乱,客场ID无法被正确识别。
  2. 匹配逻辑冗余:in_array可能匹配到非ID字段的相同值,且拆分后的数组结构导致客场ID的匹配失效。

修改后的完整代码

<?php
$reeks = "";
$stamnr = "04334"; // 测试用球队ID,可根据需求动态获取
$row = 0;

if (!empty($_POST['myselection'])) {
    $reeks = $_POST['myselection'];
    echo "<h3><b>REEKS  " . $reeks . "</b></h3>";

    if (($handle = fopen("test/masterfile.csv", "r")) !== FALSE) {
        // 跳过表头行
        fgetcsv($handle, 1000, ";");
        
        while (($col = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $col = array_map("utf8_encode", $col);
            
            // 精准匹配主客场ID
            if ($col[9] === $stamnr || $col[10] === $stamnr) {
                // 筛选指定系列的赛事
                if ($col[0] === $reeks) {
                    // 处理日期和星期显示
                    $date = str_replace('/', '-', $col[1]);
                    $dag = substr($date, 0, 2);
                    $maand = substr($date, 3, 2);
                    $jaar = substr($date, 6, 4);
                    $weekdag = getWeekDay($dag, $maand, $jaar);
                    $col[1] = $weekdag . "<br />" . $col[1];
                    
                    // 输出赛事数据
                    echo "<tr>";
                    $row++;
                    // 取前8列对应原代码需要展示的字段
                    foreach (array_slice($col, 0, 8) as $key) {
                        echo "<td>" . trim($key) . "</td>";
                    }
                    echo "</tr>";
                }
            }
        }
        fclose($handle);
    }
    echo "<br /><br />";
}

// 星期转换函数(确保存在)
function getWeekDay($day, $month, $year) {
    $timestamp = mktime(0, 0, 0, $month, $day, $year);
    return date('l', $timestamp); // 返回英文星期,如需中文可修改为date('N')后映射中文
}
?>

关键修改点说明

  1. 修正CSV读取逻辑:fgetcsv直接用;作为分隔符,无需再手动拆分,确保每行的11列数据被正确解析。
  2. 精准匹配ID:直接判断第9列(主场ID)或第10列(客场ID)是否等于目标$stamnr,避免误匹配,同时确保主客场赛事都能被捕获。
  3. 优化循环逻辑:去掉多余的列循环,直接处理整行数据,代码更简洁高效。
  4. 跳过表头:避免表头行被当作赛事数据处理。

内容的提问来源于stack exchange,提问作者LUC TERMOTE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 00:37:08