Преобразование строки PHP CSV в ассоциативный массив с именами столбцов: изучение различных подходов

В PHP работа с данными CSV (значения, разделенные запятыми) является распространенной задачей. Строки CSV часто содержат строки данных, где каждое значение разделено запятой. При работе с данными CSV может быть полезно преобразовать их в ассоциативный массив, где каждая строка представлена ​​массивом с именами столбцов в качестве ключей. В этой статье мы рассмотрим различные методы достижения такого преобразования, приведя попутно примеры кода.

Метод 1: разнесение и цикл
Один простой подход — использовать функцию explode()для разделения строки CSV на массив строк, а затем циклически перебирать каждую строку, чтобы разделить ее на отдельные строки. ценности. Мы можем использовать первую строку в качестве имен столбцов и связать их с соответствующими значениями в последующих строках. Вот пример:

function csvStringToArray($csvString)
{
    $rows = explode("\n", $csvString);
    $columnNames = explode(",", array_shift($rows));
    $result = [];
    foreach ($rows as $row) {
        $values = explode(",", $row);
        $assocArray = array_combine($columnNames, $values);
        $result[] = $assocArray;
    }
    return $result;
}
$csvString = "Name,Age,Country\nJohn,25,USA\nAlice,30,Canada";
$result = csvStringToArray($csvString);
print_r($result);

Метод 2: использование str_getcsv()
PHP предоставляет функцию str_getcsv(), которая может напрямую анализировать строку CSV в массив. Используя эту функцию, мы можем упростить процесс преобразования. Вот пример:

function csvStringToArray($csvString)
{
    $rows = explode("\n", $csvString);
    $columnNames = str_getcsv(array_shift($rows));
    $result = [];
    foreach ($rows as $row) {
        $values = str_getcsv($row);
        $assocArray = array_combine($columnNames, $values);
        $result[] = $assocArray;
    }
    return $result;
}
$csvString = "Name,Age,Country\nJohn,25,USA\nAlice,30,Canada";
$result = csvStringToArray($csvString);
print_r($result);

Метод 3: использование fgetcsv() с временным файлом.
Другой подход предполагает использование функции fgetcsv(), которая считывает строку из файла и анализирует ее как данные CSV. В этом методе мы создадим временный дескриптор файла, используя fopen(), запишем в файл строку CSV, а затем прочитаем файл, используя fgetcsv(). Вот пример:

function csvStringToArray($csvString)
{
    $tempFile = tmpfile();
    fwrite($tempFile, $csvString);
    rewind($tempFile);
    $columnNames = fgetcsv($tempFile);
    $result = [];
    while (($row = fgetcsv($tempFile)) !== false) {
        $assocArray = array_combine($columnNames, $row);
        $result[] = $assocArray;
    }
    fclose($tempFile);
    return $result;
}
$csvString = "Name,Age,Country\nJohn,25,USA\nAlice,30,Canada";
$result = csvStringToArray($csvString);
print_r($result);

В этой статье мы рассмотрели три различных метода преобразования строки PHP CSV в ассоциативный массив с именами столбцов. Каждый метод имеет свои преимущества, и выбор зависит от ваших конкретных требований и предпочтений. Используя эти методы, вы можете эффективно работать с данными CSV в PHP и манипулировать ими по мере необходимости.