Я объединяю массивы с одним и тем же заданным именем внутреннего массива, меняю значение ключа на номер заказа, а затем создаю дополнительные внутренние массивы для элементов, которые не дублируются этим кодом ...
<code>function readCSV($csvFile)
{
$line_of_text = [];
$file_handle = fopen($csvFile, 'r');
//skip csv headers
//fgetcsv($file_handle);
//fgetcsv($file_handle);
fgetcsv($file_handle);
while (!feof($file_handle)) {
$tmp = fgetcsv($file_handle, 1024);
if (isset($line_of_text[$tmp[0]])) {
foreach ($tmp as $k => $v) {
if (array_key_exists($k, $line_of_text[$tmp[0]])) {
if (!is_array($line_of_text[$tmp[0]][$k])) {
$kVal = $line_of_text[$tmp[0]][$k];
$line_of_text[$tmp[0]][$k] = [];
$line_of_text[$tmp[0]][$k][] = $kVal;
}
$line_of_text[$tmp[0]][$k][] = $v;
$line_of_text[$tmp[0]][$k] = array_unique($line_of_text[$tmp[0]][$k]);
$line_of_text[$tmp[0]][$k] = array_filter($line_of_text[$tmp[0]][$k]);
if (count($line_of_text[$tmp[0]][$k]) == 1) {
$line_of_text[$tmp[0]][$k] = array_values($line_of_text[$tmp[0]][$k]);
$line_of_text[$tmp[0]][$k] = $line_of_text[$tmp[0]][$k][0];
}
if (empty($line_of_text[$tmp[0]][$k])) {
$line_of_text[$tmp[0]][$k] = null;
}
} else {
$line_of_text[$tmp[0]][$k] = null;
}
}
$line_of_text[$tmp[0]][0] = $tmp[0];
} else {
$line_of_text[$tmp[0]] = $tmp;
}
}
fclose($file_handle);
return array_filter(array_values($line_of_text));
}
// Set path to CSV file
$csvFile = 'my.csv';
$csv = readCSV($csvFile);
//$csv is your array
foreach($csv as $key => $value){
if(!array_key_exists(@$value[0],$arr)){
$arr[@$value[0]] = [];
}
$arr[@$value[0]] = array_merge($arr[@$value[0]],$value);
}
echo "<pre>";
print_r($arr);
echo '
';
Это превращает ..
Array
(
[0] => Array
(
[0] => 15304
[1] => item1
[2] => qty = 1
)
[1] => Array
(
[0] => 15304
[1] => item2
[2] => qty = 1
)
[2] => Array
(
[0] => 15305
[1] => itemX
[2] => qty = 2
)
}
в
Array
(
[15304] => Array
(
[0] => 15304
[1] => Array
(
[0]item1
[1]item2
)
[2] => qty = 1
)
[15305] => Array
(
[0] => 15305
[1] => itemX
[2] => qty = 2
)
}
Итак, поскольку qty = 1 - это то же самое, что отфильтровывается, когда мне нужно ..
Array
(
[15304] => Array
(
[0] => 15304
[1] => Array
(
[0]item1
[1]item2
)
[2] => Array
(
[0]qty = 1
[1]qty = 1
)
)
[15305] => Array
(
[0] => 15305
[1] => itemX
[2] => qty = 2
)
}
Как я могу исключить некоторые из части "удалить дубликаты", чтобы они повторялись во внутреннем массиве, как в моем последнем примере? Это необходимо, поскольку они напрямую связаны с другими элементами с внутренним массивом, поэтому, например, если во внутреннем массиве item1 теперь есть 6 элементов, теперь qty должен также иметь все 6 элементов во внутреннем массиве, даже если они одинаковы.