str_getcsv în PHP

Citește un rând în format CSV și îl împarte într-un tablou de valori.

Sintaxă
str_getcsv(string $string, string $separator = ',', string $enclosure = '"', string $escape = '\\'): array

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ă $escape pe PHP 8.4+ și primești Deprecated. 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.