如何在PHP中打印csv文件的确切元素(给定列和行)

时间:2016-04-05 06:13:16

标签: php csv

我不确定如何在PHP中打印csv文件的确切元素(如第5列,第3行)。我有一个包含3列的CSV文件:ID,成本,位置。我需要搜索ID,我可以做,我甚至可以返回它的行号。但是,我该如何打印该行的第3列?下面的代码打印了可以找到$ interior的行号。

$lines = file('database.csv');
$line_number = false;

while (list($key, $line) = each($lines) and !$line_number) {
   $line_number = (strpos($line, $interior) !== FALSE);
}
if($line_number){
$search = $interior;
$line_number = false;
if ($handle = fopen("database.csv", "r")) {
   $count = 0;
   while (($line = fgets($handle, 4096)) !== FALSE and !$line_number) {
  $count++;
  $line_number = (strpos($line, $search) !== FALSE) ? $count : $line_number;
   }
  fclose($handle);
}
echo $line_number;

3 个答案:

答案 0 :(得分:0)

你可以找到所有逗号的位置(因为它是CSV文件)然后根据strpos($line, $search)这个函数的返回你可以决定列。但是如果你的任何一列都包含逗号,这个逻辑将会失败。 对于这种情况,请搜索",的位置(假设您的列将以双引号引用)。 你可以把它放在你的while循环中:

$searchStr = "CA" ;
$mystr = "5,50.00,CA";
$myArr = explode(",",$mystr);
foreach($myArr as $k=>$v)
{    
    if($v == $searchStr)
        echo "Column :". $k;
}

答案 1 :(得分:0)

如果

  $lines = file('database.csv');

然后给出数组中的行:

  $line = explode(",", $lines[2]);

将为您提供第3行中每个elemet的数组(注意行变量中的两个(+1))。

因此...

  Echo $line[4];

将是database.csv的第三行和第五列

答案 2 :(得分:0)

由于这个问题缺乏一个完整的(非破坏性的)答案:

您只需在csv的每一行使用str_getcsv并将结果存储在数组中:

$lines = file('database.csv');
$data = array();
foreach($lines as $line)
{
    // if your CSV uses a different delimiter or you enclose your fields with a different character than " alter the following line according to the php docs of str_getcsv
    $data[] = str_getcsv($line);
}

// get row 3, column 5:
echo $data[2][4];