1

我是 PHP 新手,我真的需要你的帮助。我有一个 CSV 文件(名为 *"Test.csv"),格式如下:

"ID";"Nom de famille";"Prénom";"Age";"Téléphone mobile";"Téléphone";"Téléphone 2";"Fax";"Adresse de messagerie";"Commentaires"

我需要可以计算特定 CSV 文件中有多少行的 PHP 代码,并将每行的“年龄”字段存储在数组中。

4

5 回答 5

5

我能想到的最强大的解决方案就是逐条读取文件记录,因为 CSV 数据可能在值包含换行符:

$ages = array(); $records = 0;
$f = fopen('data.csv', 'rt');
while (($row = fgetcsv($f, 4096, ';')) !== false) {
    // skip first record and empty ones
    if ($records > 0 && isset($row[3])) {
        $ages[] = $row[3]; // age is in fourth column
    }
    ++$records;
}
fclose($f);

// * $ages contains an array of all ages
// * $records contains the number of csv data records in the file 
//   which is not necessarily the same as lines
// * count($ages) contains the number of non-empty records)
于 2013-01-18T04:15:36.753 回答
1

文件功能只适合您。

该函数将整个文件读入一个数组。

这是您需要的代码:

<?php

$ageArray = array();
$inputFile = 'filename.csv';

$lines = file($inputFile); 
echo count($lines);
// count($lines) will give you total number of lines

// Loop through our array
foreach ($lines as $line_num => $line) {
    $ageArray[] = $line[3]; //'Age';
}

//Here is the o/p
print_r($ageArray);

?>

注意:如果启用了 fopen 包装器,则远程 URL 可以用作此函数的文件名。但我希望你会使用本地文件。

快乐的 PHP 编码。

于 2013-01-18T04:21:15.667 回答
0

我会保持简单。

function age($line)
{
    $cols = explode(",",$line);
    return $cols[3];
}

$lines = explode("\n",file_get_contents($filename));
$count = count($lines);
$ages = array_map("age",$lines);
于 2013-01-18T04:18:18.307 回答
0

对于 Windows:

$count = substr_count(file_get_contents($filename), "\r\n");

尼克斯:

$count = substr_count(file_get_contents($filename), "\n");

您可以从这篇文章中找到有关将单个字段提取到数组中的信息:

将 csv 列放入数组中

于 2013-01-18T04:08:15.007 回答
0
$fname='1.csv';
$line_cnt=0;
$age_arr=array();
if($fh=fopen($fname,'r'))
{
  while(!feof($fh))
  {
     $str=fgets($fh);
     if($str!='')
     {
        $line_cnt++;
        $a=explode(';',$str);
        $age_arr[]=$a[3];
     }
  }
  fclose($fh);
}

echo 'line_cnt='.$line_cnt.'\n';
print_r($age_arr);
于 2013-01-18T04:19:41.173 回答