我已经找到了关于这个主题的问题,但未能得到我正在寻找的东西。 This is for C++,我需要与PHP类似。 This is for including php files,我只想阅读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脚本中没有任何硬编码。
提前致谢。
答案 0 :(得分: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";}
答案 1 :(得分: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;
}
答案 2 :(得分: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
}