在某些字符串模式PHP之间匹配所有数据

时间:2013-09-09 13:28:18

标签: php regex arrays

在php中,我有一个包含发布者和书籍列表的数组。该数组看起来像这样

[p]DARK HORSE COMICS
[c]ADVENTURES INTO THE UNKNOWN ARCHIVES HC VOL 03   $49.99
[c]BALTIMORE INFERNAL TRAIN #1  $3.50
[c]BLOOD BLOCKADE BATTLEFRONT TP VOL 04     $12.99
[p]DC COMCIS
[c]BATMAN #23 VOL 03 $3.99
[p]IMAGE COMICS
[c]SAGA #35 #2.99

模式是首先列出发布者,“[p]”标记表示发布者是。以下是发布者当月发行的书籍清单[c]。该模式再次开始出版商......书籍......出版商......书籍

我想查找[p]分隔符之间的所有书籍,并将它们插入基于发布者的相应数据库中。所有黑马书籍都进入黑马数据库,所有DC漫画书都会进入DC漫画数据库。

我知道我可以使用preg_match来查找[p],但我不确定如何找到[p]标签之间的所有[c]标签,并告诉它一旦点击它就停止搜索第二个[p]标签。

我在想这样的事情

查找发布商的所有个人书籍并构建数组

look for first publisher using the [p] tag
...
find all books by first publisher using [c] tag
...
build array for first publisher
...
$darkHorse[] = "all dark horse books"
...
run into next [p] tag and stop matching books
...
look for next publisher using the next [p] tag
...
find all books for next publisher using [c] tag
...
build array for next publisher
...
$dcComics = "all dc comic books"
... 
repeat...

[p]和[c]标签是任意的。我刚插入这些来表示出版商和图书之间的差异。

然后我确定我可以将这些单独的数组插入到我的SQL数据库中。

感谢任何提示

1 个答案:

答案 0 :(得分:1)

我会这样做:

$currentPublisher = "";
foreach ($file as $line) {
    if (substr($line,0,3) == "[p]")
        $currentPublisher = substr($line,4);
    else if (substr($line,0,3) == "[c]") {
        // add book with $currentPublisher
    }
}

只需将最后找到的发布商保存在变量中,然后将其用于所有图书。当找到下一个发布者时,它将被更新。