读取目录中的所有csv文件无法正确读取行

bjp0bcyl  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(162)

我有一个脚本,读取所有CSV文件在一个给定的目录。阅读是好的,但输出不是我所寻求的。
文件的内容是

7,5133606393691467151,000000000000000000
5,-841871172646878578,00000000000000
8,-482903031559659252,000000000000

所需输出

Array (
    [0] => Array
    (
       id: 7
       number_1: 5133606393691467151
       number_2: 000000000000000000
    )
    [1] => Array (
       id: 5
       number_1: -841871172646878578
       number_2: 00000000000000
    )
    [2] => Array (
       id: 8
       number_1: -482903031559659252
       number_2: 000000000000
    )
)

这是目前为止我的代码

$files = glob("SQLs/*.csv");

foreach($files as $file) {

    if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
            foreach ($data as $lineArr) {
                list($id[],$number_1[],$number_2[]) = $lineArr;
            }
        }
        fclose($handle);
    } else {
        echo "Could not open file: " . $file;
    }
}

目前得到错误500,当我运行它通过浏览器。如果我运行它在一个控制台一样php example.php >> output.txt再次得到什么。文件output.txt是空的。

eni9jsuy

eni9jsuy1#

稍微简化一下这个想法,因为fgetcsv()返回一个数组,其中只包含.csv文件中该行的值,您只需将这些值放入一个assoc数组中,该数组的大小和形状由您选择。

$files = glob("SQLs/*.csv");
$desired= [];   //init the receiving array

foreach($files as $file) {

    if (($handle = fopen($file, "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
            $desired[] = [  'id'        => $data[0], 
                            'number_1'  => $data[1], 
                            'number_2'  => $data[2] 
                         ];
        }
        fclose($handle);
    } else {
        echo "Could not open file: " . $file;
    }
}

当然,这会把所有文件中的所有数据放入一个数组中。你可能会发现,如果有很多数据,这可能会破坏你的最大内存。但这是另一个问题。

相关问题