簡體   English   中英

PHP循環內循環

[英]PHP Loop within a loop

在我的數據庫中,我有一個“星期”表和一個“鍛煉”表。 我想實現以下目標:

  • 第一周
    • 鍛煉1標題
    • 鍛煉1內容
    • 鍛煉2標題
    • 鍛煉2內容
    • 鍛煉3 ......
  • 第二周
    • 鍛煉1標題
    • 鍛煉1內容
    • 鍛煉2標題
    • 鍛煉2內容
    • 鍛煉3 ......
  • 第三周.....

我正在嘗試類似的東西:

function get_weekly_content() {

        $user_id = $this->session->userdata('id');

        $weeks = $this->db->select('week_no')->where('user_id', $user_id)->get('weeks');

        if($weeks->num_rows > 0) {
            foreach($weeks->result() as $row) {
                $week_no = $row->week_no;

                $workouts = $this->db->where('user_id', $user_id)->where('week_no', $week_no)->get('workouts');

                if($workouts->num_rows > 0) {
                    foreach($workouts as $workout) {
                        $workout_data[] = $workout;
                    }
                }


                $weekly_data[] = $workout_data;

            }
            return $weekly_data;
        }
    }

但也許我有一個錯誤的主意。 然后,我還需要顯示數據。

編輯我的問題是,什么將是最好的方法,以實現上述並獲取和數組/對象在視圖頁面上循環?

謝謝

循環循環就可以了,您的方法是適當的。 然而!

  1. 一般來說,如果有任何避免方法,則不應在循環內運行mysql查詢,因為查詢速度很慢,這實際上會降低腳本的性能。 否則,這個想法是正確的。 嘗試在循環外編寫一個查詢,該查詢將所有相關的用戶數據放入鍵控數組中,然后在循環時從數組中提取信息。

  2. 您將看到此行的問題: $weekly_data[] = $workout_data; 如果$workouts->num_rows > 0 ...如果是第一個循環,則將拋出錯誤,因為將不會設置$workout_data ,如果是隨后的循環,則在沒有結果的任何一周,它將顯示前一周的數據。 您可以通過在內部循環頂部設置/重置$workout_data來解決此問題:


$workout_data = array(); 
if($workouts->num_rows > 0) {
   foreach($workouts as $workout) {
      $workout_data[] = $workout;
   }
}
function get_weekly_content() {

        $user_id = $this->session->userdata('id');

        $weeks = $this->db->select('week_no')->where('user_id', $user_id)->get('weeks');
        $weekly_data = array();
        if($weeks->num_rows > 0) {
            foreach($weeks->result() as $row) {
                $workout_data = array();
                $week_no = $row->week_no;

                $workouts = $this->db->where('user_id', $user_id)->where('week_no', $week_no)->get('workouts');

                if($workouts->num_rows > 0) {
                    foreach($workouts as $workout) {
                        $workout_data[] = $workout;
                    }
                }


                $weekly_data[$week_no] = $workout_data;
            }
        }
        return $weekly_data;
    }

然后訪問數據:

$weekly_data = get_weekly_content();

foreach( $weekly_data as $week_no => $workout_data){
  // do something with it.
}

話雖如此,我同意@Ben D,您應該考慮一下您的查詢並創建一個可以立即返回所有結果的查詢。

暫無
暫無

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

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