可能重复:
How to create an array from a CSV file using PHP and the fgetcsv function
我有一个包含多行逗号分隔值的文件。该文件的一个示例是:
1359739665,511251515,115151515,启动,1277771750,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,恢复,1277771750,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,恢复,1277771750,2215812581258,31.55.115.12,0,0 1359739665,511251515,115151515,结束,1277771750,2215812581258,31.55.115.12,0,0
我基本上需要遍历每一行。目前,这是我的代码:
$file = "log.txt";
$contents = file_get_contents($file);
$fields = explode(',', $contents);
foreach ($fields as $row)
{
echo $row;
}
这适用于输出整个文件。但我的问题是如何一次迭代一行。每一行基本上没有逗号,但我不知道如何在那里强制休息。我想做的是(即使代码不正确):
foreach ($fields as $row) //need $row to equal each row of the log
{
echo $row[0]; // will output 1359739665
echo $row[1]; // will output 511251515
etc...
}
谢谢!
答案 0 :(得分:3)
您应该使用str_getcsv()
或fgetcsv()
来读取CSV数据。
使用fgetcsv()
的示例:
if (($handle = fopen("log.txt", "r")) !== FALSE) {
while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {
echo $row[0] . "\n"; // Will output data contained in the first column
}
fclose($handle);
}
使用str_getcsv()
的示例:
$file = "log.txt";
$contents = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$csvRows = array_map('str_getcsv', $contents);
foreach($csvRows as $row) {
echo $row[0] . "\n"; // Will output data contained in the first column
}
当您的CSV字段在其值中包含逗号或CSV文件的文件结尾不一致时,使用explode()
手动解析CSV数据可能会导致问题。 最好使用上述专门功能,因为它们是针对此特定任务量身定制的。
答案 1 :(得分:1)
而不是使用file_get_contents
,只需使用file
:
$array_of_contents = file($file, FILE_IGNORE_NEW_LINES);
完成后,您可以遍历数组并获取每个人"列" str_getcsv
的文件:
foreach (file($file, FILE_IGNORE_NEW_LINES) as $line) {
foreach (str_getcsv($file) as $fields) {
echo $fields[0];
}
}
答案 2 :(得分:0)
计算.txt文件的行数,使用foreach()一次获取一行,爆炸行
答案 3 :(得分:0)
按新线爆炸
$fields = explode("\n", $contents);
答案 4 :(得分:0)
试试这个:
foreach(file('my.csv') as $line) {
$record = str_getcsv($line, ',');
var_dump($record);
}
函数file()
返回一个包含文件每一行的数组。迭代文件的行非常好。然后在foreach循环内部,您可以将每一行分解为单个记录。
感谢Andrew Moore,我建议您使用函数str_getcsv()
而不是explode()