Для одного из моих php-кодов я хочу, чтобы json-массив использовался из удаленного файла csv в php.
Удаленный файл csv: www.xyz.com/dir/records.csv
NAME Age ID Jhon 45 101 Bhil 42 102 Tone 41 103
Я хочу функцию, которая преобразует этот CSV-файл в массив JSON
Что-то вроде этого:
$json = '{"records": [ {"Name":"Jhon", "Age":"45", "id":"101"}, {"Name":"Bhil", "Age":"42", "id":"102"}, {"Name":"Tone", "Age":"41", "id":"103"}, ] }';
Пожалуйста, помогите мне, как включить вышеупомянутый файл csv, чтобы получить вышеупомянутый json-массив для последующего PHP-кода.
$myjson = json_decode($json, true); foreach ( $myjson['records'] as $row ) { if ($row['id'] =='101') { foreach ( $row as $field => $value ) { // do the work here } } }
Вот решение. Вы можете соответствующим образом изменить свой формат выходного массива в функции csvToJson ()
<?php function csvToJson($filename) { $handle = fopen($filename,"r"); $i=0; if($handle) { while(($line = fgetcsv($handle,1000,",","'")) !== FALSE) { if($i == 0) { $c = 0; foreach($line as $col) { $cols[$c] = $col; $c++; } } else if($i > 0) { $c = 0; foreach($line as $col) { $data[$i][$cols[$c]] = $col; $c++; } } $i++; } } $data2['records'] = array($data); fclose($handle); // return json_encode($data2); /*you don't have to convert it into json if you want to use it in your php foreach loop you can directly return this*/ return json_encode($data2); } $json = csvToJson('records.csv'); echo "<pre>"; print_r($json); ?>
Вы можете написать функцию, аналогичную этой, если у вас есть csv, хранящийся где-то локально, или fopen поддерживает удаленные адреса на вашем хосте:
<?php //pass the filename and optional the separator used in your csv to this function function csvToJson($filename, $separator = ";") { //create the resulting array $result = array("records" => array()); //check if the file handle is valid if (($handle = fopen($filename, "r")) !== false) { //check if the provided file has the right format if(($data = fgetcsv($handle, 4096, $separator)) == false || ($data[0] != "NAME" || $data[1] != "Age" || $data[2] != "ID")) { throw new InvalidImportFileFormatException(sprintf('The provided file (%s) has the wrong format!', $filename)); } //loop through your data while (($data = fgetcsv($handle, 4096, $separator)) !== false) { //store each line in the resulting array $result['records'][] = array("Age" => $data[0], "Name" => $data[1], "Id" => $data[2]); } //close the filehandle fclose($handle); } //return the json encoded result return json_encode($result); }
Если вам нужно сначала получить свой csv с удаленного адреса, используйте curl, чтобы сохранить его временно.
Вы можете использовать это, если вам нужно получить доступ к csv-файлу с удаленного сервера, либо вы можете также cURL пользователя, чтобы сохранить файл на своем сервере, а затем использовать функцию csvToJson () (сначала прокомментируйте четыре строки функции, если вы загружаете файл с помощью curl на своем сервер).
function csvToJson($filename) { $content = file_get_contents('www.xyz.com/dir/records.csv'); // $content = file_get_contents('https://docs.shopify.com/manual/your-store/products/product_template.csv'); /* demo URL *-/ $handle = fopen($filename,"w"); fwrite($handle, $content); fclose($handle); $handle = fopen($filename,"r"); $i=0; if($handle) { while(($line = fgetcsv($handle,1000,",","'")) !== FALSE) { if($i == 0) { $c = 0; foreach($line as $col) { $cols[$c] = $col; $c++; } } else if($i > 0) { $c = 0; foreach($line as $col) { if($col != ''){ $data[$i][$cols[$c]] = $col; } $c++; } } $i++; } } $data2['records'] = array($data); fclose($handle); return json_encode($data2); } $json = csvToJson('records.csv'); echo "<pre>"; print_r($json);