当返回查询结果时,哪个php循环在我的情况下更有效


Which php loop is more effective in my case, when returning query results?

哪一个对我来说更好?

While循环

:

function search_hotel($searchterm)
        {
    $query = $this->db->order_by("id", "desc")->like('name', $searchterm)->get('hotel_submits');
            $data = array();
            while($row = mysql_fetch_array($query))
            {
               $data[] = $row->name;
            }
            return $data;
}

Foreach循环:

function search_hotel($searchterm)
    {
        $query = $this->db->order_by("id", "desc")->like('name', $searchterm)->get('hotel_submits');
        $data = array();
        foreach ($query->result() as $row)
        {
           $data[] = $row->name;
        }
        return $data;             
        //return mysql_query("select * from hotel_submits where name LIKE '".$searchterm."'");
    }

while在技术上比foreach更有效,但不值得比较:在这种情况下,它们都几乎相同。

在您的示例中,查询返回的结果是数组。这意味着您可以使用foreach语句或while语句。

请注意,foreach语句针对数组(PHP5中也包括对象)进行了优化,并且比while语句更快。虽然可以使用来达到相同的效果,但如果您想遍历数组的所有元素,则的效率不如

当使用框架及其自定义DB适配器类时,在脚本中间切换回PHP的内置函数似乎毫无意义。即使CI的适配器和PHP的mysql_*函数可能使用相同的DBMS连接库(mysql)。

我强烈建议坚持Code Igniter的版本(foreach ($query->result() as $row))。从性能的角度来看,不应该有任何明显的差异。关于应用程序体系结构,不混合访问接口当然要干净得多。

看起来你混淆了mysqli和mysql的语法。这两个库在内部不兼容。您不能在一个语句中使用句柄/语句,而在另一个语句中使用它。这两个库与数据库保持完全独立的连接。

这意味着第一个将更快,因为mysql_fetch_array()将失败,内部循环将永远不会运行。但是更快并不意味着"正确"。