2011-01-20 5 views
1

私の質問は、「基準」を含む事前定義された検索オブジェクトからクエリを構築するために書いています。各検索は、基準オブジェクトの配列である$search->criteriaというプロパティを持っています....PHP - スコープの忍耐 - Codeigniter

Criteria (

    "name" => "name", //name of given field to be searched 
    "expr" => "expr", //could be "<=" ">=" "=" 
    "s_value" => "value" //value to be searched with 

) 

、適切なクエリにどこ文...

if(count($criteria)) { 
     foreach($criteria as $crit) { 
      $this->{$crit['name']}($crit['s_value'],$crit['expr']); 
     } 
    } 

そして今、最終的にここにループを呼び出している関数で、「名前」は何に対応を追加して、私の検索機能の一部criteriaオブジェクトは$ criteria ['name 「] ....質問の今

function name($value,$expr = '=') {    

    $this->db->where('specific_field_name '.$expr,$value); 

} 

..

が、私は内部の変数を作成したい 『単一の実行を超えて持続します』名前を、そのたとえば、私は2つの基準を持っている場合同じ名前で2回実行すると、変数を複数回実行することができます。私はがやりたい

EDIT

私はすべて自分のカウンターが必要なこのようなマルチプル機能を持​​っています。

function name($value,$expr = '=') {    
    if(isset($count))   
     $this->db->or_where('specific_field_name '.$expr,$value); 
     $count++; 
    } 
    else { 
     $count = 1; 
     $this->db->where('specific_field_name '.$expr,$value); 
    } 
} 

アイデア?

SOLUTION

if(count($criteria)) { 
     $criteria_count = array() 
     foreach($criteria as $crit) { 
      if(isset($criteria_count[$crit['name']])) { 
       $criteria_count[$crit['name']]++; 
      } 
      else { 
       $criteria_count[$crit['name']] = 1; 
      } 
      $this->{$crit['name']}($crit['s_value'],$crit['expr'],$criteria_count[$crit['name']]); 
     } 
    } 

をキーとして名前を持つ$criteria_count配列を維持し、特定の機能にダウンカウントを通過するメイン検索機能を変更します。

答えて

1

本当にこのようにしたい場合は、globalステートメントを使用できます。

編集:ここで私は名前に数を渡してそのように記録する方法があります。グローバル変数は、私のニーズを満たしていないだろう、なぜ私が指摘して質問を編集します

function name($value,$expr = '=',$count) {    
    if($count > 0)   
     $this->db->or_where('specific_field_name '.$expr,$value); 
     $count++; 
    } 
    else { 
     $count = 1; 
     $this->db->where('specific_field_name '.$expr,$value); 
    } 
return $count; 
} 
+0

$count = 0;

if(count($criteria)) { foreach($criteria as $crit) { $count = $this->{$crit['name']}($crit['s_value'],$crit['expr'],$count); } } 

そして名前機能:検索機能の開始時に

。 – jondavidjohn

+1

カウントを渡して返すのはどうですか? – Michael

+0

あなたの答えを説明しますか? – jondavidjohn