2

我一直在寻找有关此主题的问题,但未能得到我想要的东西。这是用于 C++的,我需要类似的用于 PHP。这是为了包含 php 文件,我只想读取一个 CSV 文件。

我有这个:

if(file_exists("data.csv")){
    echo "CSV file found";

    $csv_data = file_get_contents("data.csv"); 

    $lines = explode("\n", trim($csv_data));   

    $array = array();

    foreach ($lines as $line){
            $array[] = str_getcsv($line);

}else {echo "File not found";}

但我不想指定文件名 - 即通常加载/读取/打开文件。

这样做有什么简单的原因吗?没有意义,但有人告诉我不要在我的 PHP 脚本中硬编码任何东西。

提前致谢。

4

3 回答 3

3

采用fgetcsv

if(file_exists("data.csv")){
    echo "CSV file found";
    $handle = fopen("data.csv", "r");
    if(!$handle) die("Could not open file!");
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
      $num = count($data);
      $row++;
      for ($c=0; $c < $num; $c++) {
        echo $data[$c] . "<br />\n";
      }
    }
    fclose($handle); 

}else {echo "File not found";}
于 2012-08-29T14:13:29.943 回答
2

将您的代码放入函数中...

function open_file($file_name)
{
    if (!file_exists($file_name))
    {
        return false;
    }

    $csv_data = file_get_contents($file_name);
    $lines = explode("\n", trim($csv_data));

    $array = array();
    foreach ($lines as $line)
    {
        $array[] = str_getcsv($line);
    }

    return $array;
}
于 2012-08-29T14:12:52.207 回答
2

如果您的脚本中可能没有任何硬编码,则需要将这些硬编码的内容放入某种外部配置文件中。您必须将该配置文件的名称硬编码到您的引导程序或应用程序中首先出现的任何内容中。加载配置后,在需要的地方提供配置数据。不将配置数据硬编码到您的代码中将允许您创建更多可重用的组件和代码,例如可以读取任何CSV 文件的 CSV 阅读器,而不是只能读取硬编码到其中的一个特定 CSV 文件的 CSV 阅读器。

例子:

// config.php
<?php
return array(
    'csvFile' => '/path/to/file.csv',
    …
);

// bootstrap.php
<?php
$config = include '/path/to/config.php';
…

// someFile.php
<?php
include '/path/to/bootstrap.php';
$file = new SplFileObject($config['csvFile']);
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
   // Do something with values
}
于 2012-08-29T14:22:17.513 回答