Php 将CSV结构到对象/数组中

Php 将CSV结构到对象/数组中,php,json,Php,Json,我正在使用此代码导入一个基本CSV,其中每一行表示一张发票。我希望这些发票按其中一列进行分组,并最终进行json_编码,以生成具有父/子层次结构的json。我该怎么做呢 CSV PHP JSON(目标) 对于每个$行 @$cardCodes[$row[1]]['payment_sum'] += $row[3]; @$cardCodes[$row[1]]['details'][] = array( 'DocNum' => $row[0], 'InvPayAmnt' =>

我正在使用此代码导入一个基本CSV,其中每一行表示一张发票。我希望这些发票按其中一列进行分组,并最终进行json_编码,以生成具有父/子层次结构的json。我该怎么做呢

CSV

PHP

JSON(目标)


对于每个
$行

@$cardCodes[$row[1]]['payment_sum'] += $row[3];
@$cardCodes[$row[1]]['details'][] = array(
    'DocNum' => $row[0],
    'InvPayAmnt' => $row[3],
    'PmntDate' => $row[4?],
);

格式不完全相同,但是索引了,并且有利于js中的x/y循环。

您可以使用
json\u encode($row)
php inbuild函数,但这不会创建层次结构。因此,这与让其他人为您编写代码无关。如果你想这样做,你需要与某人签约并支付报酬。@Crontab很明显,他们是数组的noob,这不是一个复杂的问题。我想使用@Bergi的JS解决方案,但首先使用PHP。您不需要先创建“details”数组吗?它应该在while循环中吗?或者我应该编写一个新的foreach循环来执行此操作?@Crontab这是错误抑制操作符的一个有效用法,因为它只会创建不为斜体的数组,以及不存在值的空数组。和先做isset没什么区别。对于这样一个简单的格式转换,没有什么害处。@user1413248为什么要在数据中循环两次?在读取数组时写入它。@Walf不管怎样,它是懒惰的,这就是我的全部意思。按你的方式做。
if (($handle = fopen('upload/BEN-new.csv', "r")) === FALSE) {
    die('Error opening file'); 
}
 $headers = fgetcsv($handle, 1024, ',');
 $cardCodes = array();

 while ($row = fgetcsv($handle, 1024, ",")) {
    $cardCodes[] = array_combine($headers, $row);
}
fclose($handle);
 [ {
 "CardCode":"BENV5271", 
 "payment_sum": "100.00"
 "details": [ {
    "DocNum": "165",
    "InvPayAmnt": "100.00",
    "PmntDate": "2012-03-29"
  } ],

}, {
 "CardCode": "BENV5635",
 "payment_sum": "509.85"
 "details": [ {
     "DocNum": "026"  
     "InvPayAmnt": "287.33",
     "PmntDate": "2012-03-29"
   }, {
     "DocNum": "025",
     "InvPayAmnt": "222.52",
     "PmntDate": "2012-03-29"
   } ],
} ]
@$cardCodes[$row[1]]['payment_sum'] += $row[3];
@$cardCodes[$row[1]]['details'][] = array(
    'DocNum' => $row[0],
    'InvPayAmnt' => $row[3],
    'PmntDate' => $row[4?],
);