2015-05-30 1 views
-1

Используя PHP, можно ли загружать только одну запись/строку из файла CSV?Можно ли загрузить одну строку из файла CSV?

Другими словами, я хотел бы обрабатывать файл как массив, но не хочу загружать весь файл в память.

Я знаю, что это действительно то, для чего нужна база данных, но я ищу простое и грязное решение для использования во время разработки.

Редактировать: Чтобы уточнить, я точно знаю, в какой строке содержится информация, которую я ищу.

Я просто хотел бы узнать, есть ли способ получить его, не прочитав весь файл в памяти.

+2

Да, вы можете загрузить одну строку с помощью 'fgetcsv'. Кроме того, вопрос немного расплывчатый. Какие дополнительные требования у вас есть для этой строки? Вы хотите загрузить его из середины файла, из неизвестной позиции, отфильтрованного некоторым условием ...? – deceze

+2

невозможно. Вам просто нужно прочитать каждую строку, пока не найдете то, что ищете. Я видел несколько сценариев, которые отвлекают вас от внимания, поэтому вы можете писать «запросы», но под капотом все равно работает одинаково. edit: хорошо вы можете прочитать его по 1 строке за раз, но я * предположим, что вы хотите сделать, это выбрать определенную строку –

ответ

0

Как я понимаю, вы ищете строку с определенными данными. Поэтому вы, вероятно, можете реализовать следующую логику: (1) файл сканирования для данных (например, значение, которое находится в строке, которую вы пытаетесь найти), (2) загрузить только эту строку файла, (3) выполните операции на этой линии.

0

fgetcsv() работает над дескриптором ресурса файла, поэтому, если вы хотите, вы можете получить позицию линии, вы можете fseek() ресурс в эту позицию и использовать обычно fgetcsv().

0

Если вы не знаете, какую строку вы ищете, пока не прочитаете строку, лучшим вариантом будет чтение записи, пока вы не найдете запись, проверив возвращаемый массив.

$fp = fopen('data.csv', 'r'); 
while(false !== ($data = fgetcsv($fp, 0, ','))) { 
    if ($data['field'] === 'somevalue') { 
     echo 'Hurray'; 
     break; 
    } 
} 

Если вы хотите прочитать определенную строку, используйте объект splfile и найдите номер записи. Это вернет строку, которую вы должны преобразовать в массив

$file = new SplFileObject('data.csv'); 
$file->seek(2); 
$record = $file->current(); 
$data = explode(",", $record); 
Смежные вопросы