我是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
我希望能够:
prev()
,current()
,next()
在玩家之间导航。我的第一段代码看起来像这样:
$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>";
HTML中的结果是:
Array ( [0] => 5 [1] => Andre [2] => 69 [3] => Goalkeeper )
这看起来很酷。但是,
list()
没有向数组添加关联键?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>";
输出看起来像:
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
这似乎是我所需要的。然而。我问自己这是否是正确的方法,因为:
list()
函数prev()
函数我有编程COBOL(lol)和Pascal的背景知识,但PHP(和Java)对我来说是全新的。任何建议都会受到欢迎!
答案 0 :(得分: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);
{
prev
,但是数组指针已经在第一个元素,因此没有前一个,它返回false
。这可以看作:var_dump(prev($result));
答案 1 :(得分:1)
我认为str_getcsv
评论包含very laconic solution,但可以使用array_walk
$userdata
参数进行改进:
array_walk($teamdata, function(&$player, $_, $headers) {
$player = array_combine($headers, $player);
}, array_shift($teamdata));
这是the demo。