我知道有很多资源可以将CSV放入关联数组中,但我找不到任何能帮助像我这样的菜鸟做我想做的事情.
我目前在PHP文件中定义了一个关联数组:
$users = array(
'v4f25' => 'Stan Parker',
'ntl35' => 'John Smith',
);
Run Code Online (Sandbox Code Playgroud)
我想将该数组移动到CSV文件(users.txt)中,以便:
v4f25, Stan Parker
ntl35, John Smith
Run Code Online (Sandbox Code Playgroud)
下一步是导入users.txt,这样我就可以像使用数组$ users一样使用它.
这里有什么帮助?我试过的最后一个代码返回了这个:(这不是我想要的)
array(2) {
["v4f25"]=>
string(5) "ntl35"
["Stan Parker"]=>
string(10) "John Smith"
}
Run Code Online (Sandbox Code Playgroud) 我有一个非常奇怪的问题,有fgtcsv().看看这段代码
$csv_check = fopen(CSV_DIR.$this->db_table.".csv","r");
$data = fgetcsv($csv_check, 1000, $this->fields_terminated_by);
fclose($csv_check);
Run Code Online (Sandbox Code Playgroud)
print_r($ data)输出以下内容:
array (
0 => '"program_id"',
1 => 'program_name',
2 => 'program_logo',
)
Run Code Online (Sandbox Code Playgroud)
奇怪的是,$ data [0]在这里是双引号...这个CSV文件中的原始行如下所示:
"program_id";"program_name";"program_logo"
Run Code Online (Sandbox Code Playgroud)
我根本得不到它...用strlen($ data [0])计算$ data [0]的字符会返回15,即使错误引用,它也必须是12个字符...我很震惊...!
有任何想法吗?!?
我正在编写一个PHP脚本导入csv并插入到表中,但我需要获取第一行所以我可以拥有字段名称..这是我的csv
id artist song
11 NewBee great stuff
10 anotherNewbee even better
6 NewArtist New song
Run Code Online (Sandbox Code Playgroud)
如您所见,第一行是我需要的字段的名称.这是我的循环
$handle = fopen('csvs/'.$_FILES["csv"]["name"], 'r');
while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
print_r($data);
//do something with it but i need the first time around
array(3) { [0]=> string(2) "id" [1]=> string(6) "artist" [2]=> string(4) "song" }
array(3) { [0]=> string(2) "11" [1]=> string(6) "NewBee" [2]=> string(1) "great stuff" }
array(3) { [0]=> string(2) "10" [1]=> string(13) "anotherNewbee" [2]=> string(1) "even better"}
Run Code Online (Sandbox Code Playgroud)
我如何得到第一个并将它们放入变量并使用insert语句中的那些字段继续数据循环
我不能得到我编写的新代码跳过第一行(标题)作为我之前使用的代码(见底部).
我没有收到任何错误,但是不能让它省略第一行.
$file = fopen($uploadcsv,"r");
$column_headers = array();
$row_count = 0;
while(!feof($file)) {
if ($row_count==0){
$column_headers = $file;
} else {
print_r(fgetcsv($file));
}
++$row_count;
}
fclose($file);
Run Code Online (Sandbox Code Playgroud)
下面是跳过标题的旧源,供参考和比较.
$handle = fopen($uploadcsv, 'r');
$column_headers = array();
$row_count = 0;
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
if ($row_count==0){
$column_headers = $data;
} else {
print_r($data);
}
++$row_count;
}
fclose($handle);
Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个csv文件导入到一个mysql表中,我目前有一个逐行运行的脚本,因为我需要将一个id与另一个id结合使用以及格式化mysql格式的日期.
csv文件的列数多于我当前导入的列数.是否更容易导入所有列?
我正在阅读LOAD DATA INFILE(http://dev.mysql.com/doc/refman/5.1/en/load-data.html),但我想知道如何使用它并散列id并格式化日期没有逐行执行.我当前的脚本占用时间太长,导致运行时出现站点性能问题.
这是我有的:
$url = 'http://www.example.com/directory/file.csv';
if (($handle = fopen($url, "r")) !== FALSE)
{
fgetcsv($handle, 1000, ",");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
{
$EvID = $data[0];
$Ev = $data[1];
$PerID = $data[2];
$Per = $data[3];
$VName = $data[4];
$VID = $data[5];
$VSA = $data[6];
$DateTime = $data[7];
$PCatID = $data[8];
$PCat = $data[9];
$CCatID = $data[10];
$CCat = $data[11];
$GCatID = $data[12];
$GCat = $data[13];
$City = $data[14];
$State = $data[15];
$StateID = $data[16]; …Run Code Online (Sandbox Code Playgroud) 我有使用fputcsv创建的字符串
Date,Name,Hours 2013-01-02,"Test User",7:59 2013-01-03,"Test User",7:53 2013-01-04,"Test User",8:12 2013-01-07,"Test User",7:56 2013-01-08,"Test User",8:25 2013-01-09,"Test User",7:56 2013-01-10,"Test User",8:10 2013-01-11,"Test User",7:53 2013-01-14,"Test User",7:54 2013-01-15,"Test User",0:34 2013-04-01,"Test User",5:51 2013-04-02,"Test User",8:50 2013-04-03,"Test User",7:25 2013-04-04,"Test User",8:3 2013-04-05,"Test User","10:42:52[Not punch out]" ,Total,103:1
Run Code Online (Sandbox Code Playgroud)
当正确的标题(标题('Content-type:application/csv');标题('Content-Disposition:attachment; filename ="'.$ filename.'"');)被设置时,它会给出正确的csv文件.

但是我想再次将这个字符串转换为数组格式,所以我尝试将上面的字符串传递给str_getcsv但是得到像这样的数组
Array
(
[0] => Date
[1] => Name
[2] => Hours
2013-01-02
[3] => "Allen Herrera"
[4] => 7:59
2013-01-03
[5] => "Allen Herrera"
[6] => 7:53
2013-01-04
[7] => "Allen Herrera"
[8] => 8:12
2013-01-07 …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的文本文件结构如下:
email 1
email 14
email 1
email 244
email 232
email 23
email 1
Run Code Online (Sandbox Code Playgroud)
我正在尝试将文本文件拉入一个数组,然后我可以删除所有没有第一个的电子邮件.现在我限制在前20个,所有这些都有数字1,但我在我的数组中唯一得到的是数字1.当我吐出行中的项目数量时,它说1.
$file = "list.txt";// Your Temp Uploaded file
$cols = array();
ini_set('auto_detect_line_endings', true);
$fh = fopen($file, 'r');
$i = 0;
while ($line = fgetcsv($fh, 1000, "\t") !== false) {
$cols[] = $line;
if($i == 19) { break; }
$i++;
}
echo "<pre>";
print_r($cols);
echo "</pre>";
Array
(
[0] => 1
[1] => 1
[2] => 1
[3] => 1
[4] => 1
[5] => 1 …Run Code Online (Sandbox Code Playgroud) 我正在使用php导入csv,由于csv有时可能很大,因此我可以通过使用以下代码一次流式传输4096字节的文件来实现:
if(($handle = fopen($file, 'r')) !== false)
{
// loop through the file line-by-line
while(($data = fgetcsv($handle)) !== false)
{
echo var_dump($data);
unset($data);
}
fclose($handle);
}
else
{
echo "unable to open file $file <br>";
}
Run Code Online (Sandbox Code Playgroud)
某些csv具有非标准的行结束符';' 并且我需要能够指定手动结束的行,以便fgetcsv正确获取csv的每一行。
我已经阅读了建议使用ini设置的其他解决方案:
ini_set("auto_detect_line_endings", true);
Run Code Online (Sandbox Code Playgroud)
但这并没有解决我要在这里提出的问题。
解决此问题的先前方法是获取整个文件并修改所有非标准的行尾,然后将其替换为回车和换行符。随着csvs大小的增加,此解决方案不再有效。
我在var dump中得到的是csv的所有行,而不是csv的单行。CSV中的示例行:
"col1,col2,col3,col4,col5;col1,col2,col3,col4,col5;col1,col2,col3,col4,col5;"
Run Code Online (Sandbox Code Playgroud) 我已经成功编写了一个脚本,该脚本使用 cURL 下载 CSV 文件,然后将 CSV 解析为数组,如下所示:
$rows = array_map(function($a) {
return str_getcsv($a, $delimiter);
}, explode("\n", $result));
Run Code Online (Sandbox Code Playgroud)
然后我迭代$rows使用foreach将某些内容保存到数据库中。
该脚本运行良好,但是当使用较大的 CSV 文件(> 10.000 行)时,脚本会变得相当慢并且会出现更多错误。
我想将 CSV 文件分成几部分,所以不是整个文件都会被导入到一个变量中。我找到了以下解决方案,但它仍然一次处理整个文件。
有没有一种方法可以将CSV切成碎片并多次运行数据库功能?或者有没有更好的方法来处理这样的大型 CSV 文件?
我对处理大文件比较陌生,所以请多多关照!
嗨,我正在尝试使用fgetcsv处理csv,但我所有我要去的是一个无限循环的错误
警告:第5行的testcsv.php中的fopen("Tile","User"...)
警告:fgetcsv()期望参数1是资源,在第6行的/home/ratena/public_html/proc_files/testcsv.php中给出布尔值
<?php
$uploadcsv = "/home/ratena/public_html/temp/files/BatchLoadPM15.csv";
$filecsv = file_get_contents($uploadcsv);
//$batchid = $_POST['batchid'];
$handle = fopen("$filecsv", "r");
while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) {
print_r($data);
}
?>
Run Code Online (Sandbox Code Playgroud) fgetcsv ×10
php ×10
csv ×4
loops ×2
arrays ×1
csv-import ×1
file ×1
fputcsv ×1
large-files ×1
line-endings ×1
mysql ×1
parsing ×1
while-loop ×1