Ce face str_getcsv
str_getcsv înțelege regulile CSV: valorile între ghilimele pot conține separatorul, iar ghilimelele dublate ("") devin o singură ghilimea. Din acest motiv este mai sigură decât explode(",", ...).
Excel în limba română salvează adesea CSV cu punct și virgulă (;), deci schimbă $separator. Din PHP 8.4, dacă nu dai explicit parametrul $escape, primești un mesaj Deprecated; recomandarea este "" (fără caracter de escape).
Funcția citește un singur rând. Pentru un fișier întreg folosește fgetcsv sau împarte întâi textul pe linii.
Parametri
| Parametru | Descriere |
|---|---|
$string |
Rândul CSV. |
$separator |
Opțional. Separatorul dintre valori. Implicit virgulă. |
$enclosure |
Opțional. Caracterul care încadrează valorile. Implicit ghilimele duble. |
$escape |
Opțional. Caracterul de escape. Dă-l explicit, de preferat "". |
Ce returnează
Un tablou cu valorile din rând, ca texte.
Exemple
Exemplul 1: Valori cu virgulă în interior
<?php
$rand = 'Ana,"Iași, România",25';
print_r(explode(",", $rand));
print_r(str_getcsv($rand, ",", '"', ""));
Rezultat
Array
(
[0] => Ana
[1] => "Iași
[2] => România"
[3] => 25
)
Array
(
[0] => Ana
[1] => Iași, România
[2] => 25
)
Exemplul 2: CSV salvat de Excel, cu punct și virgulă
<?php
$csv = "nume;oras;total\nAna;Iași;149,50\nMihai;Cluj;1299,00";
$linii = explode("\n", $csv);
$cap = str_getcsv(array_shift($linii), ";", '"', "");
foreach ($linii as $linie) {
$rand = array_combine($cap, str_getcsv($linie, ";", '"', ""));
echo $rand["nume"] . " din " . $rand["oras"] . ": " . $rand["total"] . " lei\n";
}
Rezultat
Ana din Iași: 149,50 lei
Mihai din Cluj: 1299,00 lei
Greșeli frecvente
- Împarți rândurile CSV cu
explode(",", ...)și valorile care conțin virgule sunt rupte în două. - Apelezi
str_getcsv($rand)fără$escapepe PHP 8.4+ și primeștiDeprecated. Dă toți cei patru parametri.
Comenzi înrudite
explode: Împarte un text în bucăți după un separator și le pune într-un tablou.implode: Unește elementele unui tablou într-un singur text, cu un separator între ele.file_get_contents: Citește tot conținutul unui fișier (sau al unei adrese URL) într-un text.