2013-04-16 29 views
0

我在使用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中試過,但是我只獲取最後一個數組的值。

回答

2
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服務器。幸運的是,你的答案也涵蓋了這個。 –

0

試試這個循環中:

$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

0

除非我誤解了你的問題,爲什麼不把所有結果存儲在一個大數組中然後返回該數組?

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查詢,然後做一個大的查詢並返回結果。