В PHP часто встречаются ситуации, когда вам необходимо преобразовать значения, разделенные запятыми (CSV), в многомерный массив. Этот процесс может быть полезен для обработки импорта данных, анализа файлов CSV или обработки ввода из полей формы. В этой статье блога мы рассмотрим несколько методов достижения такого преобразования на примерах кода.
Метод 1: разнесение и цикл
Один из самых простых подходов — использовать функцию взрыв() для разделения строки CSV на массив, а затем циклически перебирать полученный массив для создания многомерного массива. Вот пример:
$csv = "John,Doe,25\nJane,Smith,30\nAlex,Johnson,28";
$rows = explode("\n", $csv);
$data = array();
foreach ($rows as $row) {
$data[] = explode(",", $row);
}
print_r($data);
Метод 2: функция str_getcsv()
PHP предоставляет встроенную функцию str_getcsv(), которая может анализировать строки CSV и преобразовывать их в массивы. Эта функция автоматически обрабатывает случаи, когда значения CSV заключены в кавычки или содержат специальные символы. Вот пример:
$csv = "John,Doe,25\nJane,Smith,30\nAlex,Johnson,28";
$rows = explode("\n", $csv);
$data = array();
foreach ($rows as $row) {
$data[] = str_getcsv($row);
}
print_r($data);
Метод 3: использование fgetcsv() со строковым потоком
Если у вас есть данные CSV, хранящиеся в строке, и вы хотите имитировать чтение из дескриптора файла, вы можете использовать строковый поток вместе с функцией fgetcsv(). Этот метод позволяет обрабатывать большие файлы CSV без загрузки всего содержимого в память. Вот пример:
$csv = "John,Doe,25\nJane,Smith,30\nAlex,Johnson,28";
$stream = fopen("php://memory", "r+");
fwrite($stream, $csv);
rewind($stream);
$data = array();
while (($row = fgetcsv($stream)) !== false) {
$data[] = $row;
}
fclose($stream);
print_r($data);
Метод 4: использование str_get_contents() с file_get_contents()
Если ваши данные CSV хранятся в файле, а не в строковой переменной, вы можете использовать функцию file_get_contents() вместе с str_getcsv() для чтения и анализа содержимое файла. Вот пример:
$csvFile = 'path/to/csv/file.csv';
$csvContent = file_get_contents($csvFile);
$rows = explode("\n", $csvContent);
$data = array();
foreach ($rows as $row) {
$data[] = str_getcsv($row);
}
print_r($data);