我的问题源于我编写的模型,用于构建包含“条件”的预定义搜索对象的查询,每个搜索都有一个属性$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']);
}
}
现在终于循环调用的函数,'name'在这里对应于条件对象设置为$ criteria ['name'] ....
function name($value,$expr = '=') {
$this->db->where('specific_field_name '.$expr,$value);
}
现在提出问题..
我想在'name'中创建一个变量,它将持续超过一次执行,因此,例如,如果我有两个具有相同名称的条件并且它执行两次,我想在它的范围内维护一个变量执行。
修改
我想要做什么。 我有这样的多种功能,都需要自己的计数器。
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
数组,并将名称作为键并将计数传递给特定函数。
答案 0 :(得分:1)
如果您真的想这样做,可以使用global
语句。
编辑:这是我如何将计数传递给名称并以此方式跟踪它。
在搜索功能开始时:$count = 0;
if(count($criteria)) {
foreach($criteria as $crit) {
$count = $this->{$crit['name']}($crit['s_value'],$crit['expr'],$count);
}
}
然后是名称功能:
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;
}