1

これは機能します:

例にはいくつかのダミー配列があります: $query.

$query_string_partsそれは

        foreach ($query as $query_keys => $query_string_parts)
        {
            $result['segments']['query'][$query_keys] = static::replace_regex_by_key($query_string_parts, ':alpha');

            $result['segments']['query'][$query_keys] = static::replace_regex_by_key($result['segments']['query'][$query_keys], ':digit');

            $result['segments']['query'][$query_keys] = static::replace_regex_by_key($result['segments']['query'][$query_keys], ':word');

            $result['segments']['query'][$query_keys] = static::replace_regex_by_key($result['segments']['query'][$query_keys], ':alphanum');

        }

他の方法では、BLA

   $bla = somethingfunction($bla, 'case0');
   $bla = somethingfunction($bla, 'case1');
   $bla = somethingfunction($bla, 'case2');
   $bla = somethingfunction($bla, 'case3');

このコードはごちゃごちゃしていてきれいではありません! こんなことはしたくない。

正規表現の置換は次のとおりです。

`

private static $regex_replace = array(':word' => '/^[\w]*$/',
                                      ':digit' => '/^[\d]*$/',
                                      ':alpha' => '/^[a-zA-Z]*$/',
                                      ':alphanum' => '/^[a-zA-Z0-9]*$/'
                                      );


private static function replace_regex_by_key($input, $regex_loop_key)
{
    return preg_replace('/'.$regex_loop_key.'/', static::$regex_replace[$regex_loop_key], $input);
}`

結果 (OK!):

前:

array(7) {
  [0]=>
  string(22) ":alpha:digit"
  [1]=>
  string(3) "abc"

後:

array(7) {
  [0]=>
  string(22) "/^[a-zA-Z]*$//^[\d]*$/"
  [1]=>
  string(3) "abc"

しかし!以下のコードは混乱していて、配列から呼び出してstatic::$regex_replace変更したい:

以下のコードはコードではないはずであり、論理的には、これの代わりに好きではありません:

    $result['segments']['query'][$query_keys] = static::replace_regex_by_key($query_string_parts, ':alpha');

    $result['segments']['query'][$query_keys] = static::replace_regex_by_key($result['segments']['query'][$query_keys], ':digit');

    $result['segments']['query'][$query_keys] = static::replace_regex_by_key($result['segments']['query'][$query_keys], ':word');

    $result['segments']['query'][$query_keys] = static::replace_regex_by_key($result['segments']['query'][$query_keys], ':alphanum');

次のようにする必要があります。

    foreach (static::$regex_replace as $key) {      
    $result['segments']['query'][$query_keys] = static::replace_regex_by_key($query_string_parts, $key);
    }

しかし、再帰的なリターンはありません。おそらく演算子を使用しています&が、クラスでは何が最善のアイデアですか?

4

1 に答える 1

0

それで、50分経ってもまだ30回のビューで答えられないので、ついにこれを解決しました.

気にしないで、別の関数として解決したので、次のように呼び出しました。

foreach ($query as $query_keys => $query_string_parts)
            {
                $result['segments']['query'][$query_keys] = static::replace_segments($query_string_parts);
            }

そして、静的として呼び出されて実行される関数:

private static function replace_segments($results)
{
    foreach (static::$regex_replace as $key => $val)
    {

        $results = static::replace_regex_by_key($results, $key);
    }

    return $results;
}
于 2013-09-07T05:53:37.683 に答える