I have a CSV file that is u开发者_StackOverflowplaoded to my server where a PHP script will parse and return output to JavaScript via AJAX.
The CSV file is made up of two rows. First row contains the column names and the second row contains the data. I am trying to write a script that will parse it in a form that will be usable by Javascript to generate text fields and labels populated with this data. The current method that I have is this:
if ( $_FILES['parameter_file']['tmp_name'] ) {
$paramfile = fopen($_FILES['parameter_file']['tmp_name'], 'r');
$header = fgets($paramfile);
$temp = explode(',', str_replace('"', '', rtrim(ltrim($header))));
$userdata = fgets($paramfile);
$temp2 = explode(',', str_replace('"', '', rtrim(ltrim($userdata))));
for ($k = 0; $k <= sizeof($temp) - 1; $k++) {
$userparam[strtolower($temp[$k])] = $temp2[$k];
}
fclose($paramfile);
}
I can see loads of room for general improvement, feel free to point them out. But the main question is would a json_encode be all I need. Anything more efficient? A better idea?
Thanks all
As Lukáš Lalinský wrote in his comment to csl's answer fgetcsv()
is your friend (by the way str_getcsv()
is not available prior to PHP 5.3).
The code should be a simple as (error-handling is left to the OP):
$headers = null;
$rowNum = 0;
$tableData = array();
$handle = fopen($_FILES['parameter_file']['tmp_name'], 'r');
while (($data = fgetcsv($handle)) !== false) {
if ($rowNum == 0) {
// parsing the CSV header
$headers = array();
foreach ($data as $d) {
$headers[] = $d;
}
} else {
// parsing the data rows
$rowData = array();
foreach ($data as $d) {
$rowData[] = $d;
}
$tableData[] = array_combine($headers, $rowData)
}
$rowNum++;
}
fclose($handle);
Given a CSV file of:
id,name,value
1,first,value1
2,second,value2
3,third,value3
this will give you a headers
-array with
array(
0 => 'id',
1 => 'name',
2 => 'value'
)
and a $tableData
-array with
array(
0 => array(
'id' => '1',
'name' => 'first',
'value' => 'value1'
),
1 => array(
'id' => '2',
'name' => 'second',
'value' => 'value2'
),
2 => array(
'id' => '3',
'name' => 'third',
'value' => 'value3'
)
)
Adjust the code as needed...
I would rather use str_getcsv() / fgetcsv() and then json_encode(). In between, you can always shuffle the data to make the outputted JSON look as you want.
In general, it's better to use the library functions if they are available.
精彩评论