54

CSV 文字列を PHP の配列に解析しようとしています。CSV 文字列には次の属性があります。

Delimiter: ,
Enclosure: "
New line: \r\n

コンテンツの例:

"12345","Computers","Acer","4","Varta","5.93","1","0.04","27-05-2013"
"12346","Computers","Acer","5","Decra","5.94","1","0.04","27-05-2013"

次のように解析しようとすると:

$url = "http://www.url-to-feed.com";
$csv = file_get_contents($url);
$data = str_getcsv($csv);
var_dump($data);

最後の要素と最初の要素が 1 つの文字列に連結されます。

[0]=> string(5) "12345"
...
[7]=> string(4) "0.04"
[8]=> string(19) "27-05-2013
"12346""

どうすればこれを修正できますか? どんな助けでも大歓迎です。

4

10 に答える 10

37

便利なワンライナー:

$csv = array_map('str_getcsv', file('data.csv'));
于 2014-12-10T20:44:59.700 に答える
9

次の関数を使用してcsv文字列を連想配列に解析しました

public function csvToArray($file) {
    $rows = array();
    $headers = array();
    if (file_exists($file) && is_readable($file)) {
        $handle = fopen($file, 'r');
        while (!feof($handle)) {
            $row = fgetcsv($handle, 10240, ',', '"');
            if (empty($headers))
                $headers = $row;
            else if (is_array($row)) {
                array_splice($row, count($headers));
                $rows[] = array_combine($headers, $row);
            }
        }
        fclose($handle);
    } else {
        throw new Exception($file . ' doesn`t exist or is not readable.');
    }
    return $rows;
}

csv ファイル名が mycsv.csv の場合、この関数を次のように呼び出します。

$dataArray = csvToArray(mycsv.csv);

このスクリプトはhttp://www.scriptville.in/parse-csv-data-to-array/でも取得できます

于 2014-09-22T15:27:07.773 に答える
3

を使用した以前の回答の修正array_map
複数行で CSV データを爆破します。

$csv = array_map('str_getcsv', explode("\n", $csvData));
于 2018-05-11T23:08:26.273 に答える