Cree una matriz de matrices para alimentar la función CSV

Estoy tratando de crear un CSV a partir de una consulta y necesito que los datos se ajusten al siguiente formato:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

$array = array(
    array("data11", "data12", "data13"),
    array("data21", "data22", "data23"),
    array("data31", "data32", "data23"));
outputCSV($array);

Estoy acostumbrado a agregar datos como este:

while ($row = mysql_fetch_array($result)){
    $values[]   = $row['value'];
}

Como puedo pasar outputCSV una matriz adecuada?

preguntado el 22 de mayo de 12 a las 21:05

Si solo quiere un CSV de datos de MySQL, ¿por qué no usar SELECT ... INTO OUTFILE? -

En realidad no sabía nada de eso, bastante útil. Sin embargo, simplifiqué mi pregunta y necesito tener la capacidad de hacer cosas con los datos, por lo que no estoy seguro de que sea la mejor solución para mí. -

3 Respuestas

function outputCSV($rows, $fieldNames = array())
{
    if ($fp = fopen('php://output', 'w')) {
        if ($fieldNames) {
            fputcsv($fp, $fieldNames);
        }
        foreach ($rows as $row) {
            fputcsv($fp, $row);
        }
        fclose($fp);
    }
}

contestado el 22 de mayo de 12 a las 21:05

Puedes usar el STDOUT constante en lugar de abrir/cerrar php://output. Ver php.net/manual/en/features.commandline.io-streams.php - huevo

@eggyal: Hacer no utilizado STDOUT ya que pasa por alto los búferes de salida. En su lugar, utiliza php://output - webbiedave

¡Yo no era consciente de eso! ¿Puedes citar una referencia? Todo lo que puedo encontrar es Se recomienda que simplemente use las constantes STDIN, STDOUT y STDERR en lugar de abrir flujos manualmente con estos contenedores. - huevo

Simplemente compruébelo usted mismo ejecutando esto en CLI: ob_start(); echo "abc"; fwrite(STDOUT, "def"); echo ob_get_clean(); - webbiedave

Bucle sobre su $arrayllamando fputcsv():

foreach ($array as $fields) fputcsv(STDOUT, $fields);

contestado el 22 de mayo de 12 a las 21:05

$values = array();

while ($row = mysql_fetch_array($result)) {
    $values[]   = $row;
}

outputCSV($values);

contestado el 22 de mayo de 12 a las 21:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.