匹配特定sting模式PHP之间的所有数据

匹配特定sting模式PHP之间的所有数据,php,regex,arrays,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]IM

在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]”标记表示它是发布服务器。下面是出版商当月发行的图书列表,用a[c]表示。该模式再次启动publisher…books…publisher…books

我希望找到[p]分隔符之间的所有书籍,并将它们插入基于publisher的相应数据库中。所有的黑马书籍进入黑马数据库所有的DC漫画书籍进入DC漫画数据库

我知道我可能可以使用preg_匹配来查找[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
    }
}

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

在我看来,它不像一个数组,你确定它不仅仅是一个字符串吗?听起来不错。我会把它编得很简单,但是很好+1.