我正在使用CodeIgnitor,我有一个定义了数组的类,它具有默认设置,但我希望能够调用其中一个函数并替换一个或多个Array值,如下所示:
在模型中我有:
class Search {
var $items = array("limit" => 10, "query"=>"foobars");
function dosearch($items) {
...
}
}
然后从控制器中调用它......
$this->load->model('search_model');
$items = array("limit"=>100);
$this->search_model->dosearch($items);
要清楚,我只想覆盖一些Model Class Array值,并保留其余部分。
我怎样才能做到最好?
感谢。
答案 0 :(得分:1)
我想这就是你要找的东西:
扩展您的方法实现,如下所示:
class Search {
var $items = array("limit" => 10, "query"=>"foobars");
function dosearch($override=array()) {
// maybe first some general plausibility checks inside $override...
if ( ! is_array($override) )
return FALSE; // better to throw an exception here!
// make a copy of $this->items you can modify:
$innerItems = $this->items;
// then use values inside $override
foreach ($override as $key=>value) {
// then some specialized plausibility checks, for example:
if ( ! in_array($key, array('limit','query') )
continue;
// is 'limit' a valid integer inside the range ]0,100]?
if ( ('limit'==$key) && (0<(int)$value) && (100>=(int)$value) )
$value=(int)$value;
else
continue;
// all fine, use override value
$innerItems[$key] = $value;
}
// now do whatever you want with $innerItems
// ...
}
}
然后你可以在运行时这样做:
$this->load->model('search_model');
$items = array("limit"=>100);
$this->search_model->dosearch($items);
请注意,我没有对此进行测试,只是将其写下来。我希望其中没有遗留下的小错误; - )
答案 1 :(得分:0)
您想要用新的数组替换$this->items
数组还是只更改键的值?在您的示例中,您正在更改整个阵列。如果您只想更改一个密钥,请执行此操作$this->items['limit'] = 100
。
答案 2 :(得分:0)
好的,我制定了一个非常优雅的解决方案,适用于CodeIgnitor。
创建配置文件,我们称之为defaultdata.php并添加您的默认数据。
$config['searchData'] = array("limit"=>10, "query"=>"foobar");
然后在你的Controller中添加:
$this->config->load('defaultdata');
$this->load->model('dostuff_model');
$temp = $this->config->item('searchData');
$temp["limit"] = 100;
$data = $this->dostuff_model->search($temp);
...
然后你已经为这个电话修改了完整的阵列准备好了! BOOM !!!!!
感谢您对上述人员的回复,这让我想到了这一点。