$line) { $row = str_getcsv($line, $delimiter); if (empty($row) || trim(implode('', $row)) === '') { continue; } if ($headers === null) { $headers = array_map('trim', $row); continue; } $data = []; foreach ($headers as $i => $header) { $value = isset($row[$i]) ? trim($row[$i]) : ''; if ($value !== '') { $data[$header] = $value; } } $key = $data['numero'] ?? ''; if ($key === '') continue; unset($data['numero']); // conversioni tipi speciali (isDestro rimane booleano) if (isset($data['isDestro'])) { $lower = strtolower($data['isDestro']); $data['isDestro'] = in_array($lower, ['true', '1', 'si', 'yes', 'vero', 't']) ? true : false; } // Conversione esplicita per i campi che devono essere numeri interi foreach (['partiteGiocate', 'assist', 'goal'] as $field) { if (isset($data[$field]) && is_numeric($data[$field])) { $data[$field] = (int)$data[$field]; } } $result[$key] = $data; } ksort($result, SORT_NATURAL); return json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); } /** * ESPORTA GIOCATORI * JSON → CSV */ function esportaGiocatori(string|array $giocatoriJson, string $delimiter = ';'): string { $data = is_string($giocatoriJson) ? json_decode($giocatoriJson, true) : $giocatoriJson; if (!is_array($data) || empty($data)) { return ''; } // raccogliamo tutte le chiavi possibili (per gestire giocatori con campi extra) $allKeys = ['numero']; foreach ($data as $obj) { $allKeys = array_merge($allKeys, array_keys($obj)); } $allKeys = array_unique($allKeys); $csvLines = []; $csvLines[] = implode($delimiter, array_map(fn($k) => csvEscape($k), $allKeys)); foreach ($data as $numero => $giocatore) { $row = ['numero' => $numero]; foreach ($allKeys as $key) { if ($key === 'numero') continue; $value = $giocatore[$key] ?? ''; // Gestione speciale per i booleani if ($key === 'isDestro' && is_bool($value)) { $row[$key] = $value ? 'true' : 'false'; } else { $row[$key] = $value; } } $csvLines[] = implode($delimiter, array_map('csvEscape', $row)); } return implode("\n", $csvLines); } /** * IMPORTA VOTI * CSV → JSON { "numero": [voto1, voto2, ...] } */ function importaVoti(string $csvContent): string|false { $separators = detectSeparators($csvContent); $delimiter = $separators['delimiter']; $result = []; $lines = preg_split('/\r\n|\n|\r/', trim($csvContent)); foreach ($lines as $index => $line) { if ($index === 0) continue; // skip header $row = str_getcsv($line, $delimiter); if (empty($row) || trim($row[0] ?? '') === '') continue; $key = trim($row[0]); if ($key === '') continue; $voti = []; // I voti sono tutti gli elementi dalla seconda colonna in poi for ($i = 1; $i < count($row); $i++) { $val = trim($row[$i]); // Normalizza SEMPRE la virgola in punto per gestire contenuti misti. // Questo è sicuro per i voti, che non usano separatori per le migliaia. $normalizedVal = str_replace(',', '.', $val); if ($val !== '' && is_numeric($normalizedVal)) { $voti[] = (float)$normalizedVal; } } if (!empty($voti)) { $result[(string)$key] = $voti; } } ksort($result, SORT_NATURAL); return json_encode($result, JSON_PRETTY_PRINT); } /** * ESPORTA VOTI * JSON → CSV */ function esportaVoti(string|array $votiJson, string $delimiter = ';', string $decimal = '.'): string { $data = is_string($votiJson) ? json_decode($votiJson, true) : $votiJson; if (!is_array($data) || empty($data)) { return ''; } $csvLines = []; $csvLines[] = 'numero' . $delimiter . 'voti'; // Intestazione foreach ($data as $numero => $votiArray) { if (!is_array($votiArray)) { continue; } // Converti i voti nel formato decimale richiesto $formattedVoti = array_map(function($voto) use ($decimal) { return str_replace('.', $decimal, (string)$voto); }, $votiArray); // Crea una riga con il numero del giocatore seguito dai suoi voti $row = array_merge([$numero], $formattedVoti); // Implode della riga con il delimitatore $csvLines[] = implode($delimiter, $row); } return implode("\n", $csvLines); } /** * Utility: escaping CSV */ function csvEscape($value): string { $value = (string)$value; if (str_contains($value, ',') || str_contains($value, '"') || str_contains($value, "\n")) { return '"' . str_replace('"', '""', $value) . '"'; } return $value; }