2014-06-11 131 views
0

我以爲我有這個工作;但經過進一步評估後,似乎沒有按照我原本希望的那樣工作。PHP與preg_match的麻煩

我有一個查詢拉回一個字符串。該字符串是一個逗號分隔的列表,就像你在這裏看到:

(1,145,154,155,158,304)

什麼也沒有添加或刪除。

我有一個功能,我想我可以使用preg_match來確定用戶的ID是否包含在字符串中。但是,看起來我的代碼正在尋找任何部分。

preg_match('/'.$_SESSION['MyUserID'].'/',$datafs['OptFilter_1'])) 

使用相同的它看起來像這樣

preg_match('/1/',(1,145,154,155,158,304))我想。在測試我的用戶標識是否爲4之後,當前的代碼返回true,它不應該。我究竟做錯了什麼?正如你所看到的ID長度可以改變。

+0

你得到的字符串是括號嗎? – ashishmohite

+0

正則表達式在這裏矯枉過正。你試圖達到什麼目的? – itachi

+4

爲什麼是正則表達式?!刪除括號並使用'explode()'創建一個用戶ID數組。然後用'in_array()'檢查所需的ID。 – revo

回答

2

最好是在陣列中的所有您的ID,然後檢查是否所需的ID是存在的:

<?php 
    $str = "(1,145,154,155,158,304)"; 
    $str = str_replace(array("(", ")"), "", $str); 
    $arr = explode(',', $str); 
    if(in_array($_SESSION['MyUserID'], $arr)) 
    { 
     // ID existed 
    } 

當你的字符串 - 在處理正則表達式,但它不是在這裏推薦

preg_match("@[,(]$ID[,)]@", $str) 

說明

下面,如果它的存在,正則表達式匹配您的ID
[,(] # a comma , or opening-parenthesis (character 
    $ID # your ID 
[,)] # a comma , or closing-parenthesis) character 
+1

很好的答案,但我會[使用'trim'而不是'str_replace'](http://php.net/trim),因爲這個函數存在這樣的目的,可能比'str_replace'快一點:'' $ str = trim('(1,145,154,155,158,304)','()');' – feeela

+0

@feeela對。我只是展示了一個簡單易懂的方法。 – revo

+0

謝謝,我用你提供的解決方案也提出瞭解決方案。完美的例子很容易讓事情變得複雜。 – wildwally