I have a script that reads all CSV files in a given directory. The reading is okay, but the output isn't what I'm seeking.
The content of the files is
7,5133606393691467151,000000000000000000
5,-841871172646878578,00000000000000
8,-482903031559659252,000000000000
Desired output
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
)
)
This is my code so far
$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;
}
}
Currently got error 500 when I run it through the browser. If I run it in a console like php example.php >> output.txt
got nothing again. The file output.txt is empty.
CodePudding user response:
Simplify the idea a bit, as fgetcsv()
returns an array containing only the values from that line of the .csv, you just need to place those values into an assoc array of the size and shape of your choosing.
$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;
}
}
This of course would put all the data from all the files into one array. You may find if there is a lot of data, this may blow your max memory. But thats another issue.