помогите с зацикливанием в php - PullRequest
0 голосов
/ 27 июня 2011

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

test.txt
-------------------------
delimiter: "--@--"

--@-- 

name:"section1"

This is section 1 with some information

--@--

name:"section2"

This is section 2 with some information

--@--

name:"section3"

this is section 3 with some information

--@--

Конец файла

Я ценю всю помощь, которую я получаю.Спасибо!

Ответы [ 2 ]

1 голос
/ 27 июня 2011

Если я понял, что вы пытаетесь сделать, это должно сделать то, что вам нужно.

<?
define(DELIMITER, '--@--');
$fh = fopen('test.txt');
$sections = array();
while ($line = fgets($fh)) {
    if ($line == DELIMITER)
        continue;
    $matches = array();
    if (preg_match('/name:"(.*)"/i', $line, $matches)) {
        $cursect = $matches[1];
        continue;
    }
    $sections[$cursect] .= $line;
}
fclose($fh);

foreach($sections as $name => $content) {
    // Do processing here.
}

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

0 голосов
/ 27 июня 2011

, учитывая, что содержание вашего текстового файла в $ string, а разделитель - $ delim, preg_match_all и array_combine помогут вам в этом

$delim = preg_quote($delim,'/');
preg_match_all('/(?<='.$delim.')\s*name:"([^"]+)"\s*(.*?)\s*(?='.$delim.')/',$string,$m);
$items = array_combine($m[1],$m[2]);

должно возвращаться что-то вроде этого:

Array
(
    [section1] => This is section 1 with some information
    [section2] => This is section 2 with some information
    [section3] => this is section 3 with some information
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...