2013-01-22 27 views
0

我有一個函數調用extractValues()並有一個帶有條件運算符的數組來傳遞它。我確實需要的是,分割字符串和運算符。例如:如何從php中給定的字符串中提取條件運算符?

$arr = array('username='=> 'Alex','id >'=>'4'); 
extractValues($arr); 

我需要分割$ arr鍵中的運算符和字符串,並將它們存儲到兩個單獨的變量中。記住所有數組鍵都是動態的。字符串和條件運算符之間可能有空格,也可能不是。

運營商所期望的數組鍵裏面有:

$operators = array('=','!=', '<', '<=', '>', '>=', 'like', 'clike', 'slike', 'not', 'is', 'in', 'between', 'and', 'or'); 
+2

又爲什麼你設計你的數組首先有這樣的鍵?有一個單獨的「運營商」鍵值爲「>」會讓你的生活更容易 –

+0

@MarkBaker我假設數組是前處理的結果。 OP告訴他他想要一個像你這樣的結構 – hek2mgl

+0

你的標籤看起來像你已經考慮過的正則表達式。你看過'preg_split'嗎?使用'PREG_SPLIT_DELIM_CAPTURE',您可以通過操作符和可選空白符進行拆分,仍然可以獲得操作符本身。 –

回答

0

除了其他的可能性,你可以使用preg_match()來實現這一目標。我不確定我是否理解你的問題,但我已經準備好了,並且應該有所幫助。它會將初始陣列具有以下結構的數組:

array(
    array('key', 'operator', 'value'), 
    array('key', 'operator', 'value'), 
    array('key', 'operator', 'value'), 
    // ... 
) 

這裏來了代碼:

$arr = array('username='=> 'Alex','id >'=>'4'); 
$result = extractValues($arr); 
var_dump($result); 

function extractValues($arr) { 
    $pattern = '/([A-Za-z_]+[A-Za-z_0-9]?)[ ]?(!=|=|<=|<|>=|'; 
    $pattern .= '>|like|clike|slike|not|is|in|between|and|or)/'; 

    $result = array(); 
    foreach($arr as $key => $value) { 
     preg_match($pattern, $key, $matches); 
     $result []= array($matches[1], $matches[2], $value); 
    } 

    return $result; 
} 

輸出如下:

array(2) { 
    [0] => 
    array(3) { 
    [0] => 
    string(8) "username" 
    [1] => 
    string(1) "=" 
    [2] => 
    string(4) "Alex" 
    } 
    [1] => 
    array(3) { 
    [0] => 
    string(2) "id" 
    [1] => 
    string(1) ">" 
    [2] => 
    string(1) "4" 
    } 
} 
+0

嗨hek2mgl,你的例子工作,但我收到的時候,當我嘗試與其他運營商例如 - 小錯誤 - $ arr = array('用戶名<='=>'亞歷克斯','id>'=>'4');如果我使用!=或> =那麼上面的例子不起作用。 – PHPArtist

+0

@SanjayDey您必須更改正則表達式模式中的運算符順序。檢查我的更新。現在它可以工作 – hek2mgl

相關問題