0

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] タグを見つけて、2 番目の [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 データベースに挿入できることを確信しています。

ヒントをありがとう

4

1 に答える 1

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

最後に見つかった出版社を変数に保存し、それをすべての本に使用するだけです。次の発行者が見つかったら更新されます。

于 2013-09-09T13:34:46.997 に答える