$row['data'], 'excelrow' => [$row['excelrow']], 'style_codes' => [], 'style_descriptions' => [], 'packages' => [] ]; } else { $grouped_data[$key]['excelrow'][] = $row['excelrow']; } // Split STYLE CODE + STYLE DESCRIPTION $action2_value = $row['data'][$action2_index] ?? ''; if (!empty($action2_value)) { $parts = explode(' - ', trim($action2_value), 2); $style_code = $parts[0] ?? ''; $style_description = $parts[1] ?? ''; if (!empty($style_code)) { $grouped_data[$key]['style_codes'][] = $style_code; } if (!empty($style_description)) { $grouped_data[$key]['style_descriptions'][] = $style_description; } } else { error_log("Valore vuoto in action2 per excelrow {$row['excelrow']}"); } // Collect values to merge into PACKAGE $package_values = []; if ($package_index !== false) { $package_values[] = trim((string)($row['data'][$package_index] ?? '')); } if ($other_test_index !== false) { $package_values[] = trim((string)($row['data'][$other_test_index] ?? '')); } if ($only_colorfastness_index !== false) { $package_values[] = trim((string)($row['data'][$only_colorfastness_index] ?? '')); } if ($only_chemical_index !== false) { $package_values[] = trim((string)($row['data'][$only_chemical_index] ?? '')); } foreach ($package_values as $package_value) { if ($package_value !== '') { $grouped_data[$key]['packages'][] = $package_value; } } } // Build the new aggregated excel_data array $new_excel_data = []; foreach ($grouped_data as $key => $group) { $row_data = $group['data']; // Update STYLE CODE and STYLE DESCRIPTION with aggregated unique values $row_data[$action3_index] = implode(' - ', array_unique($group['style_codes'])); $row_data[$action4_index] = implode(' - ', array_unique($group['style_descriptions'])); // Merge PACKAGE-related columns into PACKAGE $row_data[$package_index] = implode(' - ', array_unique($group['packages'])); // Concatenate excelrow values with "+" $excelrow_value = count($group['excelrow']) > 1 ? implode('+', $group['excelrow']) : $group['excelrow'][0]; $new_excel_data[] = [ 'data' => $row_data, 'excelrow' => $excelrow_value ]; } // Modify excelData in-place $excelData = $new_excel_data; error_log("Routine Moncler completata - Righe aggregate: " . count($new_excel_data)); error_log("Excelrow aggregati: " . print_r(array_column($new_excel_data, 'excelrow'), true)); } catch (Exception $e) { error_log("Eccezione nella routine Moncler: " . $e->getMessage()); throw $e; } }