Tengo un gran número de matrices unidimensionalesalmacenados en la memoria caché y quiero escribirlos en un archivo CSV, los arreglos vienen uno por uno a través del uso de una cola. Pero quiero "limitar cada archivo csv a aproximadamente 100 filas" y luego escribir las matrices restantes en archivos más nuevos y así sucesivamente. Apreciaría cualquier ayuda en esto. Utilicé esta función para pasar arreglos a un csv pero no sé cómo limitar el número de filas a 100 y luego abrir nuevos archivos y escribir en ellos. Los mensajes pasados en la cola son claves nombradas como SO1, SO2, SO3 n, etc. con el último mensaje pasado como "ÚLTIMO". Y en función de las claves, las matrices asociadas con las claves se leen desde memcache y deben escribirse en archivos csv. Los mensajes llegan uno tras otro a través de la cola rabitmq desde un módulo anterior. // Suponiendo que $ S01 es una matriz extraída de memcache basada en la clave, por ejemplo, S01 recibida a través de una cola. $ SO1 = matriz ("Name" => "Ubaid", "Age" => "24", "Gender" => "Male", "Lunch" => "Yes", "Total" => "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);
Respuestas
1 para la respuesta № 1Podrías hacer un contador como este.
$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
Actualizado para usar fputcsv ()
Si quieres otro separador en tu archivo csv, puedes hacer esto:
fputcsv($csv, explode(",",explode(",",$q->pop()),";"); // (;) for example. Default is comma (,)
También puede especificar un campo de cierre
fputcsv($csv, explode(",",explode(",",$q->pop()),",","""); // (") for example. Default is double quote (")
fputcsv () toma 2 parámetros requeridos y 2 opcionales
int fputcsv ( resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = """ [, string $escape_char = "" ]]] )
Los campos serán una matriz, por lo tanto
explotar (",", $ q-> pop ())como el segundo parámetro