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

时间:2011-07-14 16:35:04

标签: php codeigniter

在我的情况下,这两个中哪一个更好?

while loop:

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."'");
    }

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

请注意,foreach语句针对使用数组进行了优化(从PHP5开始,对象也是如此),并且比while语句更快。虽然可以用来达到相同的效果,但它不是那么有效如果你想要通过数组的所有元素

答案 2 :(得分:1)

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

我强烈建议坚持Code Igniter的版本(foreach ($query->result() as $row))。从性能的角度来看,不应该有任何明显的差异。关于应用程序架构,不要混合访问接口肯定是很多更清洁。虽然它可能会有用,但它也可能会导致问题。

答案 3 :(得分:0)

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

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