Php 代码点火器计数/If
我花了太长时间才弄明白。我正在使用Codeigniter查询数据库。 模型就是这样做的Php 代码点火器计数/If,php,codeigniter,Php,Codeigniter,我花了太长时间才弄明白。我正在使用Codeigniter查询数据库。 模型就是这样做的 function currentfunction($id) { $query = $this->db->get_where('mytable', array("id =" => $id)); if($query->num_rows() > 0){ return $query->result_array(); }else {
function currentfunction($id)
{
$query = $this->db->get_where('mytable', array("id =" => $id));
if($query->num_rows() > 0){
return $query->result_array();
}else {
return false;
}
}
控制器
$this->load->model('Display');
$results = $this->Display->currentfunction($id);
$this->load->view('current_items', array('currentitems' => $results));
景色
foreach($currentitems as $row){
echo $row['name']
///....do more
}
工作正常,除非没有返回行
然后
我如何处理if…else…场景
我试过了,但不管用。PlsHlp.只要做:
if(is_array($currentitems)) {
foreach($currentitems as $row){
echo $row['name']
///....do more
}
}
else
{
echo "No items in database!";
}
您将收到一个错误,因为foreach希望其第一个参数是数组。如果数据库中没有项目,但函数返回false。这是因为运行代码时:
$query = $this->db->get_where('mytable', array("id =" => $id));
if($query->num_rows() > 0){
return $query->result_array();
}else {
return false;
}
当没有返回任何行时,上面的代码可以正常工作,但在您尝试运行for循环的视图中它不起作用。
如果没有返回行,则不应运行此for循环。然而,您正在尝试运行forloop,即使没有要处理的行
我的建议是这样修改代码:
$query=$this->db->get_-where('mytable',数组(“id=“=>$id))
在视图中,在for循环之前,您将有如下内容:
if($noResults != true){
foreach($currentitems as $row){
echo $row['name']
///....do more
}
}
else{
//do something
echo "No items in database!";
}
希望这有帮助
PK为什么不这样做:
function currentfunction($id)
{
return $this->db->get_where('mytable', array("id =" => $id));
}
在视图中,如果没有结果,将返回一个空数组,foreach
不会抛出错误:
foreach($currentitems->result_array() as $row)
{
echo $row['name']
///....do more
}
更干净
如果要在视图中显示错误消息,可以执行以下操作:
if($currentitems->num_rows() > 0)
{
foreach($currentitems->result_array() as $row)
{
echo $row['name']
///....do more
}
}
else
{
// Error message
}
这比两次检查if/else是否有结果要好,就像哈夫丹和帕万建议的那样。别担心。你比我先到那儿。我们俩心里都有相同的谴责。也就是说,如果不先检查是否有行可以使用,就不能运行forloop。GrRr下次我会在你之前到达:P很好,不过有一个问题。这不是“如果…”或“其他…”。。在MVC模型中,逻辑最好留给控制器?但我不确定真正的优势是什么。在我看来,在视图中使用if/else或foreach迭代没有什么错。在视图中,我喜欢使用控件结构()的替代语法来保持视图的整洁。如果您不想显示错误消息,您甚至不需要If/else!
foreach($currentitems->result_array() as $row)
{
echo $row['name']
///....do more
}
if($currentitems->num_rows() > 0)
{
foreach($currentitems->result_array() as $row)
{
echo $row['name']
///....do more
}
}
else
{
// Error message
}