1

アップロードされた CSV ファイルを PHP の配列に処理しようとしています。私はそれで問題なく動作していますが、ユーザーからの一部のファイルには区切り記号付きの空白行がたくさんあります。これは通常、既存のファイルで Excel を使用する場合に発生します。古いセルを強調表示し、それらをクリアします。

サンプル CSV ファイル

lineNo,date,vendor,amount
1,5/2/2012,V000236,3727.21
2012 年 2 月 2 日、V003432、4826.19
、、、
、、、

次の配列になります

配列
(
    [0] => 配列
        (
            [0] => 行番号
            [1] => 日付
            [2] => ベンダー
            [3] => 金額
        )

    [1] => 配列
        (
            [0] => 1
            [1] => 2012 年 5 月 2 日
            [2] => V000236
            [3] => 3727.21
        )

    [2] => 配列
        (
            [0] => 2
            [1] => 2012 年 5 月 2 日
            [2] => V003432
            [3] => 4826.19
        )

    [3] => 配列
        (
            [0] =>
            [1] =>
            [2] =>
            [3] =>
        )

    [4] => 配列
        (
            [0] =>
            [1] =>
            [2] =>
            [3] =>
        )
)

空白の行を削除するだけではなく、配列インデックス 2 の後で停止したいのです。関数を簡単に使用してください。私は新しいです :P

function csvToArray($csvFile, $specialChars = FALSE) {
$arrayCSV = array();

if (($csvHandle = fopen($csvFile, "r")) !== FALSE) { // Open the CSV
    $csvKey = 0; // Set the parent array key to 0

    while (($csvData = fgetcsv($csvHandle)) !== FALSE) {
        $c = count($csvData); // Count the total keys in each row

        //need something to stop on blank delimiter rows ,,,

        for ($x = 0; $x < $c; $x++) { //Populate the array
            if ($specialChars === TRUE) {
                $arrayCSV[$csvKey][$x] = htmlspecialchars($csvData[$x]);
            } else {
                $arrayCSV[$csvKey][$x] = $csvData[$x];
            }
        }
        $csvKey++;
    }

    fclose($csvHandle);
}

return $arrayCSV;
}

最終的にはこれを返してほしい

配列
(
    [0] => 配列
        (
            [0] => 行番号
            [1] => 日付
            [2] => ベンダー
            [3] => 金額
        )

    [1] => 配列
        (
            [0] => 1
            [1] => 2012 年 5 月 2 日
            [2] => V000236
            [3] => 3727.21
        )

    [2] => 配列
        (
            [0] => 2
            [1] => 2012 年 5 月 2 日
            [2] => V003432
            [3] => 4826.19
        )
)
4

4 に答える 4

1

空の値を見つけたらすぐに while ループできませんbreak;か?

if (($csvHandle = fopen($csvFile, "r")) !== FALSE) { // Open the CSV
    $csvKey = 0; // Set the parent array key to 0

    while (($csvData = fgetcsv($csvHandle)) !== FALSE) {
        $c = count($csvData); // Count the total keys in each row

        // ## Flag variable ##########
        $empty = true;

        for ($x = 0; $x < $c; $x++) { //Populate the array

            // ## Test each value ##########
            $empty = $empty && (empty($csvData[$x]));

            if ($specialChars === TRUE) {
                $arrayCSV[$csvKey][$x] = htmlspecialchars($csvData[$x]);
            } else {
                $arrayCSV[$csvKey][$x] = $csvData[$x];
            }
        }

        // ## Stop loop if all empty ##########
        if ($empty) {
             unset($arrayCSV[$csvKey]);
             break;
        }
        $csvKey++;

    }

    fclose($csvHandle);
}
于 2012-06-06T12:59:44.927 に答える
-3

あなたが望むことを正確に行うこのphp関数をお勧めします

http://www.php.net/manual/es/function.file.php

于 2012-06-06T12:59:24.567 に答える