簡體   English   中英

CodeIgniter中foreach循環中的返回值

[英]Return value in foreach loop in CodeIgniter

我在使用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;放在哪里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服務器,就可以同時獲得所需的所有數據。

除此之外,在代碼中練習一致的樣式。 從長遠來看,它將節省您的時間和頭發。

在循環中嘗試這個:

$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號線”。 它將包含一系列查詢結果。

除非我誤解了你的問題,為什么不將所有結果存儲在一個大數組中然后返回該數組呢?

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查詢,然后只執行一個大查詢並返回結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM