Мой вопрос проистекает из модели, которую я пишу для построения запросов из предопределенных объектов поиска, которые содержат «критерии», каждый поиск имеет свойство $search->criteria
, которое представляет собой массив объектов критериев ....
Criteria (
"name" => "name", //name of given field to be searched
"expr" => "expr", //could be "<=" ">=" "="
"s_value" => "value" //value to be searched with
)
и часть моей функции поиска, которая добавляет правильные операторы where в запрос ...
if(count($criteria)) {
foreach($criteria as $crit) {
$this->{$crit['name']}($crit['s_value'],$crit['expr']);
}
}
И, наконец, наконец, функция, которую вызывает цикл, здесь «имя» соответствует тому, что объект критерия установил как $ критерии ['имя'] ....
function name($value,$expr = '=') {
$this->db->where('specific_field_name '.$expr,$value);
}
Теперь к вопросу ..
Я хочу создать переменную внутри «имени», которая будет сохраняться после одного выполнения, поэтому, например, если у меня есть 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);
}
}
Идеи
РЕШЕНИЕ
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
с именами в качестве ключей и передачей отсчета для определенных функций.