Первый элемент в цикле while?


Я пишу PHP-скрипт, который импортирует csv и вставляет в таблицу, но мне нужно получить первую строку, чтобы у меня были имена полей.. вот мой csv

id  artist          song           
11  NewBee          great stuff
10  anotherNewbee   even better   
6    NewArtist       New song

Как вы можете видеть, первая строка - это название полей, которые мне нужны. вот мой цикл

$handle = fopen('csvs/'.$_FILES["csv"]["name"], 'r');

while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
 print_r($data); 
 //do something with it but i need the first time around 


 array(3) { [0]=> string(2) "id" [1]=> string(6) "artist" [2]=> string(4) "song" } 
 array(3) { [0]=> string(2) "11" [1]=> string(6) "NewBee" [2]=> string(1) "great stuff" }  
 array(3) { [0]=> string(2) "10" [1]=> string(13) "anotherNewbee" [2]=> string(1) "even better"} 

Как мне получить первые и поместить их в переменные и продолжить цикл данных, используя эти поля в инструкции insert

Author: Matt Elhotiby, 2010-11-02

3 answers

Сработает ли это для вас?

$row = 1;

while (($data = fgetcsv($handle, 1000, ',')) !== FALSE) {
    if($row == 1) {
        // do something
    }
    else
    {
        // do something
    }

    ++$row;
}
 12
Author: zerodin, 2010-11-02 02:43:21

Перед блоком while просто запустите функцию fgetcsv один раз и сохраните заголовки полей.

 3
Author: mattmoon9, 2010-11-02 02:23:56

Методы deepsat или mattmoon9 будут работать нормально. Вот как ответ mattmoon9 будет выглядеть структурированным в коде (также на основе моего комментария к ответу):

$handle = fopen('csvs/'.$_FILES["csv"]["name"], 'r');

if (($columns = fgetcsv($handle, 1000, ',')) !== false) {
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        // Process data
    }

    // Insert into database using $columns as table column names
} else {
    // The file couldn't be parsed as CSV
}
 2
Author: BoltClock, 2017-05-23 12:17:36