将csv文件转换为PHP 2D数组

Mar*_*k B 5 html php csv arrays file

我是PHP新手,一直在努力将CSV文件读入2D数组.我使用以下文件'csv/team.csv':

ID,Nickname,Shirtnumber,Position
1,Jimmy,0,RightBack
2,Mark,3,CentreBack
3,Bryan,17,LeftMidfielder
4,James,23,Striker
5,Andre,69,Goalkeeper
Run Code Online (Sandbox Code Playgroud)

我希望能够:

  1. 在html/css-website页面上显示各个玩家的'name','shirtnumber','position'等.
  2. 使用PHP函数prev(),current(),next()玩家之间进行导航.
  3. 使用关联键(除了索引键).

我的第一段代码看起来像这样:

    $teamdata = file("csv/team.csv");
    foreach ($teamdata as $playerline) {
            $player = explode(",", $playerline);
            list($ID,$Nickname,$Shirtnumber,$Position) = $player;
    { 
    print_r($player); echo "<br>";
    print_r(prev($player)); echo "<br>";
Run Code Online (Sandbox Code Playgroud)

HTML中的结果是:

Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper )
Run Code Online (Sandbox Code Playgroud)

这看起来很酷.然而,

  1. 为什么不list()向数组添加关联键?
  2. 为什么不起作用prev()?(PHP没有给出任何错误消息或警告)

通过介绍$myplayer,我创建了一个数组$player.

    $teamdata = file("csv/team.csv");
    foreach ($teamdata as $playerline) {
            $player = explode(",", $playerline);
            list($ID,$Nickname,$Shirtnumber,$Position) =$player;
        $myplayer[]=$player;
}   

    print_r($player); echo "<br>"; echo "<br>";
    print_r($myplayer); echo "<br>";echo "<br>";

    echo $player[1]; echo "<br>";
    echo $player[3]; echo "<br>"; echo "<br>";
    echo $myplayer[1][1]; echo "<br>";
    echo $myplayer[2][1]; echo "<br>";
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper ) 

Array ( [0] => Array ( [0] => ID [1] => Nickname [2] => Shirtnumber [3] => Position ) 
        [1] => Array ( [0] => 1 [1] => Jimmy [2] => 0 [3] => RightBack ) 
        [2] => Array ( [0] => 2 [1] => Mark [2] => 3 [3] => CentreBack ) 
        [3] => Array ( [0] => 3 [1] => Bryan [2] => 17 [3] => LeftMidfielder ) 
        [4] => Array ( [0] => 4 [1] => James [2] => 23 [3] => Striker ) 
        [5] => Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper ) ) 

Andre
Goalkeeper

Jimmy
Mark
Run Code Online (Sandbox Code Playgroud)

这似乎是我所需要的.然而.我问自己这是否是正确的方法,因为:

  1. 该功能list()无法使用
  2. 该功能prev()无法使用
  3. 用于选择正确的"播放器属性"的编码是"复杂的",并且可以容易地进行错误

我有编程COBOL(lol)和Pascal的背景,但PHP(和Java)对我来说是全新的.任何建议都会受到欢迎!

Abr*_*ver 1

  1. list只是将数组值分配给变量。

您可能想首先提取标题并将其与每一行组合以获得关联数组:

$teamdata = file("csv/team.csv", FILE_IGNORE_NEW_LINES);
//get and remove first line to use as keys
$headings = str_getcsv(array_shift($teamdata));

foreach ($teamdata as $playerline) {
        $player = str_getcsv($playerline);
        //combine keys with values
        $result[] = array_combine($headings, $player);
{ 
Run Code Online (Sandbox Code Playgroud)
  1. 您调用prev数组,但是数组指针已经位于第一个元素,因此没有前一个元素,并且返回false。这可以通过以下方式看到:var_dump(prev($result));