匹配某些刺痛模式 PHP 之间的所有数据


Match All Data Between certain sting pattern PHP

在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数据库中。

感谢任何提示

我会这样做:

$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
    }
}

只需将最后找到的出版商保存在变量中,并将其用于所有书籍即可。找到下一个发布者时,将对其进行更新。