我有这样的csv。
我创建了一个CLI脚本,它将读取CSV,它将根据帐户ID,地址ID和SKU创建一个数组。
我会像这样执行脚本
php csvimport.php 10 /var/www/test/testcsv.csv
在上面的代码中,10是脚本的限制,它将占用前10个然后它将创建一个数组,然后它将查找下一个10,它将创建另一个数组。这里我需要处理一个条件,即批处理的第一行值应该匹配接下来的9行。如果在第一行之后没有匹配,则将该行创建为单独的数组。
我需要预期的输出。每次它将采取限制并根据限制的第一行比较行。
array[A1][ad1] => SKU1,SKU2,SKU3,SKU4,SKU5,SKU25,SKU26
array[A1][ad12] => SKU1
array[A1][ad2] => SKU3,SKU4,SKU5,SKU6,SKU7,SKU8
array[A2][ad2-1] => SKU13,SKU14,SKU15,SKU16,SKU17,SKU18
$file = '/var/www/html/var/csv/cv1.csv'; $arr=array(); $row = 1; $i = 1; $limit = 10; if (($handle = fopen($file, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $num = count($data); $row++; for ($c = 0; $c < $num; $c++) { $arr[$row][$data[0]][$data[1]]= $data[$c]; if ($i++ == $limit) break; } } fclose($handle); } echo "<pre>"; print_r($arr); exit;
答案 0 :(得分:1)
需要更新for
循环内的代码。将其更新为:
for ($c = 0; $c < $num; $c++) {
if (isset($arr[$data[0]]) && isset($arr[$data[0]][$data[1]])) {
$arr[$data[0]][$data[1]] .= "," . $data[$num - 1];
} else {
$arr[$data[0]][$data[1]] = $data[$num - 1];
}
if ($i++ == $limit)
break;
}