Разработчику. Сборник рецептов PHP
Задавайте вопросы

Чтение записей с шаблоном-разделителем

Вернуться назад

Задача

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

Решение

Прочитайте весь файл в строку, а затем выделите из нее регулярное выражение:

$filename = '/path/to/your/file.txt';
$fh = fopen($filename, 'r') or die($php_errormsg);
$contents = fread($fh, filesize($filename));
fclose($fh);

$records = preg_split('/[0 9]+\) /', $contents);

Обсуждение

Этот пример разделяет нумерованный список на части и помещает отдельные элементы списка в элементы массива. Поэтому если есть такой список:

1) Godel
2) Escher
3) Bach

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

Array
(
      [0] =>
      [1] => Godel
      [2] => Escher
      [3] => Bach
)

Это можно рассматривать как дополнительную функциональность, а не как ошибку, поскольку теперь n-й элемент массива содержит n-й элемент списка. Но чтобы сделать массив более компактным, можно удалить первый элемент:

$records = preg_split('/[0 9]+\) /', $contents);
array_shift($records);

Можно также выполнить другое преобразование, а именно удалить из всех элементов символ новой строки и заменить его пустой строкой:

$records = preg_split('/[0-9]+\) /', str_replace("\n",'',$contents));
array_shift($records);

PHP не позволяет изменить при вводе записей разделитель на что-нибудь другое, кроме символа новой строки, поэтому данный прием так- же полезен при поиске отдельных записей, разделенных переводами строки. Однако если вы просто разделяете записи внутри одной строки, то следует предпочесть более эффективную функцию explode(), а не preg_split().

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ