标签: fgetcsv

CSV到数组PHP

我知道有很多资源可以将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)

php csv parsing fgetcsv

5
推荐指数
1
解决办法
4873
查看次数

fgetcsv()错误地将双引号添加到第一行的第一个元素

我有一个非常奇怪的问题,有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 fgetcsv double-quotes

5
推荐指数
2
解决办法
1072
查看次数

while循环中的第一个元素?

我正在编写一个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语句中的那些字段继续数据循环

php csv loops while-loop fgetcsv

4
推荐指数
1
解决办法
1万
查看次数

如何使用fgetcsv在我的while循环中跳过标题行?

我不能得到我编写的新代码跳过第一行(标题)作为我之前使用的代码(见底部).

我没有收到任何错误,但是不能让它省略第一行.

$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)

php csv file fgetcsv

4
推荐指数
1
解决办法
4198
查看次数

将大型CSV文件导入MySQL

我正在尝试将一个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)

php mysql load-data-infile fgetcsv

4
推荐指数
1
解决办法
8966
查看次数

使用php str_getcsv函数将csv文件数据转换为数组

我有使用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文件.

使用php str_getcsv将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)

php arrays loops fgetcsv fputcsv

4
推荐指数
1
解决办法
1万
查看次数

PHP选项卡将文本文件分隔为数组

我有一个巨大的文本文件结构如下:

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 fgetcsv

4
推荐指数
1
解决办法
1万
查看次数

PHP fgetcsv和自定义行结束符

我正在使用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)

php csv line-endings fgetcsv

4
推荐指数
1
解决办法
1047
查看次数

如何逐行处理大型 CSV 文件?

我已经成功编写了一个脚本,该脚本使用 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 文件?

我对处理大文件比较陌生,所以请多多关照!

php large-files fgetcsv csv-import

4
推荐指数
1
解决办法
3825
查看次数

使用fgetcsv时PHP返回错误

可能重复:
mysql_fetch_array()期望参数1是资源,在select中给出boolean

嗨,我正在尝试使用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)

php fgetcsv

3
推荐指数
1
解决办法
1万
查看次数