[英]PHP Loop within a loop
在我的數據庫中,我有一個“星期”表和一個“鍛煉”表。 我想實現以下目標:
我正在嘗試類似的東西:
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;
}
}
但也許我有一個錯誤的主意。 然后,我還需要顯示數據。
編輯我的問題是,什么將是最好的方法,以實現上述並獲取和數組/對象在視圖頁面上循環?
謝謝
循環循環就可以了,您的方法是適當的。 然而!
一般來說,如果有任何避免方法,則不應在循環內運行mysql查詢,因為查詢速度很慢,這實際上會降低腳本的性能。 否則,這個想法是正確的。 嘗試在循環外編寫一個查詢,該查詢將所有相關的用戶數據放入鍵控數組中,然后在循環時從數組中提取信息。
您將看到此行的問題: $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.