0

私はextractValues()を呼び出す関数を持っており、それを渡すための条件演算子を含む配列を持っています。私が正確に必要としているのは、文字列と演算子を分割することです。例えば:

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

$ arrキー内で使用可能な演算子と文字列を分割し、2つの別々の変数に格納する必要があります。すべての配列キーは動的であることを忘れないでください。文字列と条件演算子の間にスペースがある場合とない場合があります。

配列キー内で期待される演算子は次のとおりです。

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

1 に答える 1

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"
  }
}
于 2013-01-22T10:14:34.753 に答える