1

2次元配列をcsvファイルに挿入しようとしています

ここに私のコードがあります

<?php
$cars = array( array("Volvo",100,96), array("BMW",60,59), array("Toyota",110,100));
$fp = fopen('file.xls', 'w');
foreach ($cars as $fields) {
    fputcsv($fp, $fields);
}
fclose($fp);
?>

ただし、値はcsvファイルの単一行に挿入されます。

何か案は

4

2 に答える 2

1

内容をコンマで区切って、行ごとに書き込む必要があります。

$export_arr =$_POST['dataString'];
$fp = fopen('file.xls', 'w');
foreach ($export_arr as $fields) {
    fputcsv($fp, $fields,",");
}
fclose($fp);
于 2013-08-13T05:53:48.927 に答える
1

編集1:

このバージョンでは、保存を促すプロンプトを表示せずにファイルに保存し、わずかな境界線のある表に出力します。表の境界線はファイルに書き込まれず、画面に出力されるだけです。

<?php

$fp = fopen('file.xls', 'w');
$cars = array( array(Volvo,100,96), array(BMW,60,59), array(Toyota,110,100));
$titleArray = array_keys($cars[0]);
$delimiter = "\t";
$filename="file.xls";
 
//Loop through each subarray, which are our data sets
foreach ($cars as $subArrayKey => $subArray) {
    //Separate each datapoint in the row with the delimiter
    $dataRowString = implode($delimiter, $subArray);

//  print $dataRowString . "\r\n"; // prints output to screen

fwrite($fp, $dataRowString . "\r\n");

} // keep this always end of routine

// start of cell formatting

$row = 1;
if (($handle = fopen("file.xls", "r")) !== FALSE) {
   
    echo '<table border="1" cellspacing="0" cellpadding="3">';
   
    while (($data = fgetcsv($handle, 1000, '\t')) !== FALSE) {
        $num = count($data);
        if ($row == 1) {
            echo '<thead><tr>';
        }else{
            echo '<tr>';
        }
       
        for ($c=0; $c < $num; $c++) {
            //echo $data[$c] . "<br />\n";
            if(empty($data[$c])) {
               $value = "&nbsp;";
            }else{
               $value = $data[$c];
            }
            if ($row == 1) {
                echo '<th>'.$value.'</th>';
            }else{
                echo '<td align="center">'.$value.'</td>';
            }
        }
       
        if ($row == 1) {
            echo '</tr></thead><tbody>';
        }else{
            echo '</tr>';
        }
        $row++;
    }
   
    echo '</tbody></table>';
    fclose($handle);
}

?>


編集2:

このバージョンでは、データを処理してから、ファイルを保存するように求められます。

出力:

ボルボ100 96
BMW 60 59
トヨタ 110 100

PHP コード:

<?php

$cars = array( array(Volvo,100,96), array(BMW,60,59), array(Toyota,110,100));
 
$titleArray = array_keys($cars[0]);
 
$delimiter = "\t";
 
$filename="file.xls";
 
//Send headers
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=$filename");
header("Pragma: no-cache");
header("Expires: 0");
 
 
//Loop through each subarray, which are our data sets
foreach ($cars as $subArrayKey => $subArray) {
    //Separate each datapoint in the row with the delimiter
    $dataRowString = implode($delimiter, $subArray);
    print $dataRowString . "\r\n";
}
?>


最初のバージョン:

出力は次のようになります。

ボルボ
100
96
BMW
60
59
トヨタ
110
100

これが望ましい結果である場合、これを達成するためのコードは次のとおりです。

<?php

$cars = array( array(Volvo,100,96), array(BMW,60,59), array(Toyota,110,100));

$fp = fopen('file.xls', 'w');

foreach ($cars as $fields) {

    fputcsv($fp, $fields, "\n");

}
fclose($fp);
?>
于 2013-08-13T06:11:42.167 に答える