Php 以标题行作为键的CSV到Json
我想将CSV转换为Json,使用标题行作为键,每行作为对象。我该怎么做呢 ----------------------------------CSV---------------------------------Php 以标题行作为键的CSV到Json,php,json,Php,Json,我想将CSV转换为Json,使用标题行作为键,每行作为对象。我该怎么做呢 ----------------------------------CSV--------------------------------- InvKey,DocNum,CardCode 11704,1611704,BENV1072 11703,1611703,BENV1073 if (($handle = fopen('upload/BEN-new.csv'. '', "r")) !== FALSE) {
InvKey,DocNum,CardCode
11704,1611704,BENV1072
11703,1611703,BENV1073
if (($handle = fopen('upload/BEN-new.csv'. '', "r")) !== FALSE) {
while (($row_array = fgetcsv($handle, 1024, ","))) {
while ($val != '') {
foreach ($row_array as $key => $val) {
$row_array[] = $val;
}
}
$complete[] = $row_array;
}
fclose($handle);
}
echo json_encode($complete);
---------------------------------PHP-----------------------------------
InvKey,DocNum,CardCode
11704,1611704,BENV1072
11703,1611703,BENV1073
if (($handle = fopen('upload/BEN-new.csv'. '', "r")) !== FALSE) {
while (($row_array = fgetcsv($handle, 1024, ","))) {
while ($val != '') {
foreach ($row_array as $key => $val) {
$row_array[] = $val;
}
}
$complete[] = $row_array;
}
fclose($handle);
}
echo json_encode($complete);
只需分别阅读第一行并将其合并到每一行:
if (($handle = fopen('upload/BEN-new.csv', 'r')) === false) {
die('Error opening file');
}
$headers = fgetcsv($handle, 1024, ',');
$complete = array();
while ($row = fgetcsv($handle, 1024, ',')) {
$complete[] = array_combine($headers, $row);
}
fclose($handle);
echo json_encode($complete);
我发现自己每隔几个月就会将csv字符串转换为数组或对象 我创建了一个类,因为我很懒,不喜欢复制/粘贴代码 此类将csv字符串转换为自定义类对象:
对于那些希望把事情解释得更清楚一点的人,可以在没有额外循环的情况下进一步解析任何行/列:
function csv_to_json_byheader($filename){
$json = array();
if (($handle = fopen($filename, "r")) !== FALSE) {
$rownum = 0;
$header = array();
while (($row = fgetcsv($handle, 1024, ",")) !== FALSE) {
if ($rownum === 0) {
for($i=0; $i < count($row); $i++){
// maybe you want to strip special characters or merge duplicate columns here?
$header[$i] = trim($row[$i]);
}
} else {
if (count($row) === count($header)) {
$rowJson = array();
foreach($header as $i=>$head) {
// maybe handle special row/cell parsing here, per column header
$rowJson[$head] = $row[$i];
}
array_push($json, $rowJson);
}
}
$rownum++;
}
fclose($handle);
}
return $json;
}
函数csv\u to\u json\u byheader($filename){
$json=array();
if($handle=fopen($filename,“r”)!==FALSE){
$rownum=0;
$header=array();
while(($row=fgetcsv($handle,1024,“,”)!==FALSE){
如果($rownum==0){
对于($i=0;$i$head的页眉){
//可能在这里处理特殊的行/单元格解析,每个列标题
$rowJson[$head]=$row[$i];
}
数组推送($json,$rowJson);
}
}
$rownum++;
}
fclose($handle);
}
返回$json;
}
主要内容:
关于这件事,你有什么不明白的?它打开一个文件句柄,将第一行读入
$headers
,然后读取其余的行。它将每一行与$headers
组合在一起。看见