如何通过行和列值获取csv单元格值

时间:2019-06-06 20:01:40

标签: php

我有一个简单的CSV表

Name,Year of birth,City
Yeremy,1980,New York
Louis,1982,Washington
Marta,1987,Chicago
David,1985,Los Angeles

此外,我有这段代码可以通过行数和列数获取单元格值:

$trow = 3;
$tcolumn = 3;

$output .= '<span>';
$row = 1;
$mycsvfile = array();
if (($handle = fopen($abspath, "r")) !== FALSE) {
   while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
   $num = count($data);
   $row++;
   $mycsvfile[] = $data;.
   }
   fclose($handle);
}
$output .= $mycsvfile[$trowN][$tcolumnN];
$output .= '</span>';

我想定义$ trow = Marta和$ tcolumn = City,因此,在这种情况下,要获取值“芝加哥” ...

1 个答案:

答案 0 :(得分:0)

可以对代码进行很多优化,但是使用当前代码:

$output .= array_column($mycsvfile, null, 0)['Marta'][2];
  • 根据Name(列0)中的值对数组重新索引
  • 访问索引为Marta的索引,并在City(列2)中获取值

如果您将列名组合在一起,则可以按列名进行访问:

if (($handle = fopen($abspath, "r")) !== FALSE) {
   $columns = fgetcsv($handle, 1000, ",");

   while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
       $mycsvfile[] = array_combine($columns, $data);
   }
   fclose($handle);
}
$output .= array_column($mycsvfile, null, 'Name')['Marta']['City'];

请记住,如果Marta列中的Name出现多次,则将返回最后一个。