繁体   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