限制在PHP中写入csv文件的1D关联数组的行数


Limit the number of rows of 1D associative arrays written in to a csv file in PHP

我有大量一维数组存储在内存缓存中,我想将它们写入CSV文件,这些数组通过使用队列一个接一个地来。但我想"将每个csv文件限制在大约100行",然后将剩余的数组写入较新的文件中,以此类推。我将非常感谢在这方面的任何帮助。我使用这个函数将数组传递到csv中,但我不知道如何将行数限制为100,然后打开新文件并写入它们。队列中传递的消息是名为SO1、SO2、SO3的密钥,依此类推,最后一条消息传递为"last"。基于密钥,与密钥相关联的数组从memcache中读取,并且必须写入csv文件。消息通过rabitmq-队列从前面的模块一个接一个地到达。//假设$S01是基于通过队列接收的密钥(比如S01)从memcache提取的数组。$SO1=数组("姓名"=>"优步"、"年龄"=>"24"、"性别"=>"男性"、"解锁"=>"是"、"总计"=>"1000");

$row_count= 0;
$csv_file_count= 1;

while($msg != "LAST" ){  // As long as msg recieved is not LAST
$csv = fopen("file_". $csv_file_count.".csv", "w");
    fputcsv($csv, array_keys($SO));
    while($msg != "LAST" && $row_count<100){                    
        fputcsv($csv, $SO);         // Write toCSV
        $row_count++;
    }
    $row_count=0;                                   
    $csv_file_count++;                                              
    fclose($csv);

您可以制作这样的计数器。

$row_count = 0;
$csv_file_count = 1;

while (!$q->isEmpty()){            // as long as the queue is not empty
    $csv = fopen("file_".$csv_file_count.".csv", "w");   // open "file_n.csv" n file number
    fputcsv($csv,explode(',',"col1,col2,col3,col4"));    // Your custom headers
    while (!$q->isEmpty() && $row_count < 100){          // so while queue is not empty and the counter didnt reach 100
        fputcsv($csv, explode(',',$q->pop()));       // write to file. Explode by , or space or whatever your data looks like
        $row_count++;                  // increment row counter
    }
    $row_count = 0;            // when that is not true anymore, reset row counter
    $csv_file_count++;         // increment file counter
    $csv.close()           // close file
}  // repeats untill queue is empty

更新为使用fputcsv()

如果你想在csv文件中使用另一个分隔符,你可以这样做:

fputcsv($csv, explode(',',explode(',',$q->pop()),";"); // (;) for example. Default is comma (,)

您也可以指定一个现场机柜

fputcsv($csv, explode(',',explode(',',$q->pop()),",","'"); // (') for example. Default is double quote (")

fputcsv()获取2个必需参数和2个可选

来自php.net fputcsv

int fputcsv ( resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = '"' [, string $escape_char = "'" ]]] )

字段应该是一个数组,因此

爆炸(',',$q->pop())
作为第二个参数