2013-03-13 2 views
0

Я пытаюсь прочитать файл csv, а затем сохранить первый и 21-й столбцы в ассоциативном массиве, так что первый столбец становится ключом, а 21-й столбец становится значением.Создание ассоциативного массива из файла csv php

Позже я хотел бы вытащить записи на основе «ключа». Файл PHP, содержащий код является upload.php

$calls = array(); 
$file_handle = fopen($C1.".File.csv","r"); // $C1 is defined before. 
//Just appending something to the file name. This file exists. 
while (!feof($file_handle)) { 
    $line= fgetcsv($file_handle, 1024); 
    $calls[$line[0]] = $line[20]; //Line 94 of this file 

} 
fclose($file_handle); 
print_r($calls); 

Я получаю эту ошибку

Undefined offset: 20 in upload.php on line 94 

Где я буду неправильно.

+0

Что находится в upload.php в строке 94? Потому что вы не используете смещение 24 здесь, так что ваша проблема должна быть где-то в другом месте. – Havenard

+0

обновлен мой ответ – Ank

+0

В этой строке отсутствует запятая. Или возможно, что вся строка пуста. var_dump ($ строка); – mkaatman

ответ

1

Двадцатый «колонна» в нулевой индексированный массив будет $line[19]

обновление в соответствии с вашим комментарием (и последующего редактирования):

Ошибка ясно указывает на какой-то момент во время цикла $line[20] не задано. Если каждая строка имеет подходящее количество столбцов, то единственной причиной, о которой я могу думать, является то, что в конце файла CSV есть пустая строка.

Например.

1. foo, bar, baz 
2. a , b , c 
3.     <-- empty line as a result of carriage return 

так ... Вы хотите, чтобы проверить, что trim($line)!='' перед тем fgetcsv и/или как часть хорошей проверкой ошибок обработки, что длина массива больше, чем самый высокий показатель, который вы пытаетесь читать.

+0

Спасибо. Но я не думаю это ошибка. Csv, который я пытаюсь прочитать, имеет около 50 столбцов. – Ank

+0

@Ankur обновленный ответ – Emissary

+0

Я не мог видеть пустую строку или пустое пространство, но обрезать ($ line)! = '' Исправил это. – Ank

Смежные вопросы