А есть ли в PHP такая функция? Считать файл с разделителями в двумерный массив.

xintrea

Новичок
А есть ли в PHP такая функция? Считать файл с разделителями в двумерный массив.

Зравствуйте!

А вот такой вопрос. Есть довольно распространенное действие - прочитать файл в двумерный массив. Что я имею в виду - есть файл, например такого формата, где :: - разделители "полей".

Vasya::pupkin::p[email protected]
Ivanov::Ivan::[email protected]
и т.д.

Так вот, есть ли в PHP готовая функция, которая затянет в двумерный массив такой файл?

Я спрашиваю потому, что конструкция в стиле

PHP:
$afile=fopen('file.txt');
$cfile=count($afile)-1;
for($i=0;$i<=$cfile;$i++)
 foreach(split('::',$afile[$i]) as $key => $value)  
  $a[$i][$key]=$value;
работает достаточно медленно. Так как действие, которое выполняет функция достаточно стандартно, возник вопрос - может я просто не знаю названия этой функции?

А если такой функции нет (в стандартных сборках PHP 4.3.x), то как можно ускорить эту процедуру?

(Предлагать храненить эти данные в SQL не нужно, вопрос про файлы.)
 

pavel31

Новичок
Функции нет, есть методы ускорения процесса.
Читаеш поблочно-побайтно в "поток", тио есть строку указанной длины.
Обрабатываеш переходы строк и разделители.
Максимальный прирост получается, когда попадаеш "в размер кластера" винчестера ...
Актуально для больших объемов, тхт в районе 100 Мб и более ...
 

Dreammaker

***=Ф=***
[m]fgetcsv[/m].

попробуй её использовать в конструкции разбора. Насколько я понял можно использовать нестандартные разделители.

правда, сразу оговорюсь использовал только со стандартными.
update: немного не то, но по идее должно помочь ускориь процесс.
 

.des.

Поставил пиво кому надо ;-)
Можно посоветовать небольшие улучшения
1. split заменить на explode и вынести из foreach.
2. foreach заменить на for.
3. не обращать внимания на бред товарища pavel31

Кстати, в приведенном коде чтение из файла, то собственно где?
 

pavel31

Новичок
То фанат: как нет? Есть жеж. Причем на порядок. И еще, фореач тоже "медленно". Правда относительно токо ... Повторюсь - актуально для больших объемов.

-~{}~ 01.10.06 14:52:

Автор оригинала: .des.
Можно посоветовать небольшие улучшения
1. split заменить на explode и вынести из foreach.
2. foreach заменить на for.
3. не обращать внимания на бред товарища pavel31
Ага. еще гарантированно сравнить скорость того, что я предложил и
пхп-переделок после реализации.

-~{}~ 01.10.06 14:53:

Кстати, в приведенном коде чтение из файла, то собственно где?
Ну ошибся, не написал он не файл а фопен.
 

xintrea

Новичок
Ладна, спасибо, попробую эти методы.

Да, я ошибся, вместо file() написал fopen(), ибо не копи-пасте делал.
 
Сверху