2012-04-01 61 views
0

我想根據將要插入的圖書的格式分配類別。假設有3種不同的格式。漫畫,精裝本,平裝本。我從另一個網站獲取數據,下面列出了針對此特定區域的當前代碼。對此腳本使用正則表達式的最佳方法?

$string = $item2['data']; 
$number = preg_match("/((Comic)|(Hardcover)|(Paperback))[^A-Za-z]+/", $string, $fields); 
$format = $fields[1]; 

的輸出或者漫畫,精裝或平裝

三個父類別是漫畫(1),精裝(2),平裝(3) 兒童類別:製造商(4),系列( 5)

(#)是每個類別的ID。

我的想法是類似的。

$number = preg_match("/((Comic))[^A-Za-z]+/", $string, $fields); 

if <what goes here for true?> //check to see if value is a comic 
    {$cat = array(1,4,5);} 
    else 
     if <what goes here for true?> //check to see if value is a hardback 
      {$cat = array(2,4,5);} 
      else      // if not hardback or comic it must be a paperback 
       $cat = array(3,4,5); 

但是.....你將如何設置它?還是有更好的方法?

回答

2

您可以使用查找數組:

$lookup = array(
    'Comic'  => 1, 
    'Hardcover' => 2, 
    'Paperback' => 3 
); 
if (preg_match("/(Comic|Hardcover|Paperback)[^A-Za-z]+/", $string, $match)) { 
    $cat = array($lookup[$match[1]], 4, 5); 
} 

有了這個,你甚至可以從數組鍵構建模式:

$pattern = '/(' . implode('|', array_map(function($key) { return preg_quote($key, '/'); }, array_keys($lookup))) . ')[^A-Za-z]+/'; 
+0

精美的作品謝謝你!這個腳本中剩下的唯一一件事,就是我如何在本網站的重量區域放置數據。你用一個數值來設定重量,然後有一個下降的磅,盎司等等,這個插件是WP電子商務。你有任何想法如何訪問該自定義元? – 2012-04-01 14:50:27

1

我想你想是這樣的:

preg_match("/(Comic|Hardback|Paperback)[^A-Za-z]+/", $string, $fields); 

    switch ($fields[1]) 
    { 

    case ('Comic'): 
     $cat = array(1, 4, 5); 
     break; 

    case ('Hardback'): 
     $cat = array(2, 4, 5); 
     break; 

    case ('Paperback'): 
     $cat = array(3, 4, 5); 
     break; 

    default: 
     // Do something if none of above 

    } 

雖然是什麼$string預期結構?目前,它將匹配包含「精裝本」(或「漫畫」或「平裝本」)單詞的任何內容,然後匹配任何不是一次或多次字母的字符。這是你想要的嗎?

請注意,我已經明確檢查了平裝書幷包含了一個默認設置。將來可以更容易地添加其他類型,或者如果給定的數據不是以上內容(您是否可以肯定它只能是以上三種之一?)

編輯合併Basti's建議(使用$fields而不是三個單獨的preg_match es)。

+0

這是一個很好的點。感謝您的建議。 – MichaelRushton 2012-04-01 10:35:28