Считывайте CSV построчно и создавайте индивидуальный массив с ограничением
У меня был такой csv-файл
Изображение
Теперь я хочу прочитать csv построчно, используя лимит. Вместо того чтобы читать полный csv и создавать целый массив, скрипт будет читать csv строка за строкой и создавать определенный массив на основе лимита. Например, если я установлю предел равным 4. Он прочитает первые 4 строки и создаст индивидуальный массив.
Проблема в том, что в настоящее время он создавал полный массив вместо отдельного массива. Мне нужен ожидаемый результат вот так
Array ( [Location 1] => Array ( [48-9] => Array ( [1] => Array ( [0] => SKU1, SKU2,SKU4,SKU5(The duplicate SKU 1 needs to be removed) ) ) ) ) Array ( [Location 1] => Array ( [48-9] => Array ( [1] => Array ( [0] => SKU6 ) ) ) ) Array ( [Location 2] => Array ( [48-9] => Array ( [2] => Array ( [0] => SKU1 ) ) ) ) Array ( [Location 3] => Array ( [48-9] => Array ( [3] => Array ( [0] => SKU1 ) ) ) ) Array ( [Location 3] => Array ( [48-1] => Array ( [1] => Array ( [0] => SKU1,SKU2,SKU3 ) ) ) ) Array ( [Location 1] => Array ( [48-9] => Array ( [1] => Array ( [0] => SKU10, SKU11 ) ) ) )
Что я уже пробовал:
<pre> $file = '/var/www/html/test.csv'; $arr = array(); $i = 1; $array = array(); $x = 0; $limit =4; $newArray = array(); $oldKey = ''; if (($handle = fopen($path, "r")) !== false) { fgetcsv($handle); while (($data = fgetcsv($handle, 1000, ",")) !== false) { if ($oldKey != $data[0] . $data[1] . $data[2]) { $oldKey = $data[0] . $data[1] . $data[2]; $x = 0; $i = 1; } $array[$data[0]][$data[1]][$data[2]][$x][] = $data[3]; if ($i++ == $limit) { $x++; $i = 1; } } foreach ($array as $akey => $a) { foreach ($a as $bkey => $b) { foreach ($b as $ckey => $c) { foreach ($c as $key => $d) { $newArray[$akey][$akey][$bkey][$ckey][$key] = implode(',', $d); } } } } fclose($handle); $this->processCsv($newArray); }