Импорт из CSV на PHP, фреймворк Laravel, первая строка заголовки
Задача импортировать CSV. Первая строка заголовки, остальные данные.
Пример содержимого (файл разместил в проекте Laravel: storage/test.csv):
Title;"C Line";Featuring;"Primary genre";"Track artist name";"Track Featuring";"Track primary genre";ISRC;"Track title";UPC
"Живу хорошо";Explorer;;"Rock - Singer / Songwriter";"Куку";;"Rock - Singer / Songwriter";FR-X20-11-56789;Причина;73734265345643
"Pretty Romantic Goon";Peter;;"Rock - Singer / Songwriter";"Кака";;"Rock - Singer / Songwriter";FR-X20-22-56189;Она;54376546546456
Пример чтения CSV командой на Laravel:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class Test extends Command
{
protected $signature = 'command:test';
protected $description = 'Command description';
public function __construct()
{
parent::__construct();
}
public function handle()
{
// Чтение файла CSV
$csv = fopen(storage_path('test.csv'), 'r');
if ( !$csv ) $this->output->writeln("Ошибка! Файл не открывается: " . storage_path('test.csv'));
// Получение первой строки с заголовками
$columns = fgetcsv($csv, 2048, ';');
// Проходим все заголовки в цикле
foreach ($columns as $k => $v) {
// У первого заголовка убираем символ который вызывает ошибку (если титул на латинице написан)
if ($k == 0) $v = iconv("UTF-8", "CP1252//IGNORE", $v);
// Убираем пробелы по краям
$columns[$k] = trim($v);
}
// получение кол-ва заголовков
$column_count = count($columns);
// Проходим циклом все строки
while ( $data = fgetcsv($csv, 2048, ';') ) {
// Проверка кол-ва записей если меньше чем кол-во заголовков
if (count($data) < $column_count) continue;
// Проходим массив данных и убираем пробелы по краям
foreach ($data as $k => $v) $data[$k] = trim($v);
// Ключи для массива данных из массива первой строки
$data = array_combine($columns, $data);
// Получение результата
print_r($data);
}
}
}
Выполнить:
php artisan command:test
Результат выполнения:
Array
(
[Title] => Живу хорошо
[C Line] => Explorer
[Featuring] =>
[Primary genre] => Rock - Singer / Songwriter
[Track artist name] => Куку
[Track Featuring] =>
[Track primary genre] => Rock - Singer / Songwriter
[ISRC] => FR-X20-11-56789
[Track title] => Причина
[UPC] => 73734265345643
)
Array
(
[Title] => Pretty Romantic Goon
[C Line] => Peter
[Featuring] =>
[Primary genre] => Rock - Singer / Songwriter
[Track artist name] => Кака
[Track Featuring] =>
[Track primary genre] => Rock - Singer / Songwriter
[ISRC] => FR-X20-22-56189
[Track title] => Она
[UPC] => 54376546546456
)