/ / Limite el número de filas de matrices asociativas 1D escritas en un archivo csv en PHP - php, csv, array asociativo, export-to-csv, fputcsv

Limite el número de filas de arreglos asociativos 1D escritos en un archivo csv en PHP - php, csv, array asociativo, export-to-csv, fputcsv

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 № 1

Podrí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

De php.net fputcsv

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