在CodeIgniter的foreach循环中的返回值

在CodeIgniter的foreach循环中的返回值

问题描述:

我在使用CodeIgniter从模型返回值到控制器时遇到了一些麻烦。我从控制器传递两个数组到模型。我正在检查两个数组是否都是空的,并使用foreach循环来循环它们以从数据库中获取一些值并将查询返回给控制器。这里是我当前的代码
在CodeIgniter的foreach循环中的返回值

if (!empty($search_for_area) && !empty($search_for_requirement)) 
     { foreach($search_for_requirement as $search_value_1) 
      { 
      foreach($search_for_area as $search_value_2) 
       { 
       if($search_value_2 != null && $search_value_1 != null) 
        { 
        $nearbytution = $this->db->query('select name,area,contactno from tut_listing where area = "'.$search_value_2.'" and categoryfilter like "%'.$search_value_1.'%" and partner > "" group by name'); 
        print_r($nearbytution->result()); 
        } 
       } 
      } 

     //Line 1 
     } 

print_r($nearbytution->result());工作正常,我能够查看结果。我应该在哪里放return $nearbytution;,以便我可以获取所有提取的值?我在Line 1中试过,但是我只获取最后一个数组的值。

function returnStuff($search_for_area,$search_for_requirement) { 
    $arr_area = array(); 
    $arr_filter = array(); 
    if (! empty($search_for_area) and ! empty($search_for_requirement)) { 
     foreach($search_for_requirement as $search_value_1) { 
      foreach($search_for_area as $search_value_2) { 
       if($search_value_2 != null && $search_value_1 != null) { 
        $arr_area[] = $this->db->escape($search_value_2); 
        $arr_filter[] = $this->db->escape_like_str($search_value_1); 
       } 
      } 
     } 
    } 

    $str_area = 'NULL'; 
    if ($arr_area) 
     $str_area = implode(', ', $arr_area); 

    $str_filter = "'^-$'"; 
    if ($arr_filter) 
     $str_filter = "'(".implode('|', $arr_filter).")'"; 

    $query = $this->db->query(" 
     SELECT name, area, contactno 
     FROM tut_listing 
     WHERE area IN ({$str_area}) AND categoryfilter REGEXP {$str_filter} and partner > '' group by name 
    "); 

    return $query->result(); 
} 

说真的,请考虑这种方法。你只需要用一个电话打扰可怜的Mysql服务器,并同时获得你想要的所有数据。

除此之外,在代码中练习一致的样式。从长远来看,这将节省您的时间和头发。

+0

谢谢..这应该做的伎俩..: )即使我想知道是否可以通过多次调用来访问Mysql服务器。幸运的是,你的答案也涵盖了这个。 –

试试这个循环中:

$nearbytution[] = $this->db->query('select name,area,contactno from tut_listing where area = "'.$search_value_2.'" and categoryfilter like "%'.$search_value_1.'%" and partner > "" group by name')->result(); 

return $nearbytution;随后可以被放置在你的 “1号线”。它将包含一系列查询结果。

+0

(不过,我觉得我要补充一点,在循环中查询是不完全的好习惯......) – Mudshark

除非我误解了你的问题,为什么不把所有结果存储在一个大数组中然后返回该数组?

function returnStuff($search_for_area,$search_for_requirement) { 
    $data = array(); 
    if (!empty($search_for_area) && !empty($search_for_requirement)) {    
     foreach($search_for_requirement as $search_value_1) { 
     foreach($search_for_area as $search_value_2) { 
      if($search_value_2 != null && $search_value_1 != null) { 
       $nearbytution = $this->db->query('select name,area,contactno from tut_listing where area = "'.$search_value_2.'" and categoryfilter like "%'.$search_value_1.'%" and partner > "" group by name'); 
       $data[] =$nearbytution->result()); 
       } 
      } 
     } 
    } 
    return $data; 
} 

现在$ data将是一个结果数组,每个结果都包含查询结果。如果必须清理结果集(例如删除重复项),则可以循环执行并执行清理。

你也可能做的是在你的foreach循环中建立一个大型的SQL查询,然后做一个大的查询并返回结果。