PHP - 根据CSV

时间:2018-06-19 04:08:22

标签: php arrays csv foreach

我有这样的csv。

enter image description here

我创建了一个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;

1 个答案:

答案 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;
}