По сути, я пытаюсь импортировать данные CSV в мою базу данных. Прежде чем вставить данные в базу данных, я хочу проверить, есть ли в базе данных этот столбец (из заголовков CSV) или нет.
// read csv from file ex: data.csv
$reader = \League\Csv\Reader::createFromPath($file);
// get first row from csv as headers (email, first_name, last_name etc.)
$headers = array_filter(array_map(function($value) { return strtolower(trim($value)); }, $reader->fetchOne()));
// get fields from database (email, first_name, last_name, birthdate etc.)
$fields = collect($this->fields)->map(function ($field) {
return strtolower($field->tag);
})->toArray();
// want to check which fields has csv
$availableFields = array_intersect($headers, $fields);
Однако, когда я запускаю приведенный выше код, array_intersect не работает должным образом.
Вывод:
$headers : Array ([0] => email [1] => first_name [2] => last_name )
$fields : Array ( [0] => email [1] => first_name [2] => last_name [3] => telephone [4] => gender [5] => birthdate [6] => country )
$availableFields :Array ([1] => first_name [2] => last_name )
var_dump и результат:
$headers : array(3) {
[0]=>
string(8) "email"
[1]=>
string(10) "first_name"
[2]=>
string(9) "last_name"
}
$fields : array(9) {
[0]=>
string(5) "email"
[1]=>
string(10) "first_name"
[2]=>
string(9) "last_name"
[3]=>
string(9) "telephone"
[4]=>
string(6) "gender"
[5]=>
string(9) "birthdate"
[6]=>
string(7) "country"
}