fgetcsv

(PHP 4, PHP 5, PHP 7, PHP 8)

fgetcsvPrende una riga da un puntatore a file e l'analizza in cerca di campi CSV

Descrizione

fgetcsv(
    resource $stream,
    ?int $length = null,
    string $separator = ",",
    string $enclosure = "\"",
    string $escape = "\\"
): array|false

Simile a fgets() eccetto per il fatto che fgetcsv() analizza le riga letta alla ricerca di campi in formato CSV e restituisce un array contenente i campi letti.

Nota: Le impostazioni locali vengono prese in considerazione da questa funzione. Ad esempio, i dati codificati in determinati formati a byte singolo potrebbero essere analizzati in modo errato se LC_CTYPE è impostato su en_US.UTF-8.

Elenco dei parametri

stream

Un puntatore valido a un file che punta a un file aperto con successo da fopen(), popen() o fsockopen().

length

Deve essere più grande della riga più lunga (in caratteri) per essere trovato nel file CSV (tenendo conto dei caratteri di fine riga). Altrimenti, la riga viene suddivisa in blocchi di length caratteri, a meno che la divisione non avvenga all'interno di una chiusura.

Se si omette questo parametro (o lo si imposta su 0, o null in PHP 8.0.0 o versioni successive), la lunghezza massima della riga non è limitata, ma è leggermente più lenta.

separator

Il parametro separator imposta il separatore di campo. Deve essere un carattere a byte singolo.

enclosure

Il parametro enclosure imposta il carattere di chiusura del campo. Deve essere un carattere a byte singolo.

escape

Il parametro escape imposta il carattere di escape. Deve essere un carattere a byte singolo o la stringa vuota. La stringa vuota ("") disabilita il meccanismo di escape proprietario.

Avviso

Nel flusso di input, il carattere enclosure può sempre essere sottoposto a escape raddoppiandolo all’interno di una stringa tra virgolette, producendo un singolo carattere enclosure nel risultato analizzato. Il carattere escape funziona in modo diverso: se una sequenza di caratteri escape e enclosure appare nell’input, entrambi i caratteri saranno presenti nel risultato analizzato. Quindi, per i parametri predefiniti, una riga CVS come "a""b","c\"d" avrà i campi analizzati come a"b e c\"d, rispettivamente.

Avviso

A partire da PHP 8.4.0, dipendere dal valore predefinito di escape è deprecato. Deve essere fornito esplicitamente, sia per posizione che mediante l'uso dei named arguments.

Avviso

When escape is set to anything other than an empty string ("") it can result in CSV that is not compliant with » RFC 4180 or unable to survive a roundtrip through the PHP CSV functions. The default for escape is "\\" so it is recommended to set it to the empty string explicitly. The default value will change in a future version of PHP, no earlier than PHP 9.0.

Valori restituiti

Restituisce un array indicizzato contenente i campi letti in caso di successo, o false in caso di fallimento.

Nota:

Una riga vuota in un file CSV verrà restituita come un array contenente un singolo campo null e non sarà trattata come un errore.

Nota: Se PHP non riconosce correttamente i fine riga durante la lettura di file creati o provenienti da un computer Macintosh, l'abilitazione dell'opzione di configurazione runtime auto_detect_line_endings potrebbe aiutare a risolvere il problema.

Errori/Eccezioni

Genera un ValueError se separator o enclosure non sono lunghi un byte.

Genera un ValueError se escape non è lungo un byte o è una stringa vuota.

Log delle modifiche

Versione Descrizione
8.4.0 L'affidamento sul valore predefinito di escape è ora deprecato.
8.3.0 Viene restituita una stringa vuota invece di una stringa con un singolo byte null per l'ultimo campo se contiene solo una chiusura non terminata.
8.0.0 length è ora nullable.
7.4.0 Il parametro escape ora accetta anche una stringa vuota per disabilitare il meccanismo di escape proprietario.

Esempi

Example #1 Legge e stampa il contenuto di un file CSV

<?php
$row
= 1;
if ((
$handle = fopen("test.csv", "r")) !== FALSE) {
while ((
$data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
echo
"<p> $num campi sulla riga $row: <br /></p>\n";
$row++;
for (
$c=0; $c < $num; $c++) {
echo
$data[$c] . "<br />\n";
}
}
fclose($handle);
}
?>

Vedere anche: