CodeIgniter控制器中如何填充包含所有结果的映射数组?
解决CodeIgniter控制器向视图传递多组查询结果的问题
这问题太常见啦——你当前的循环每次都会用新的查询结果直接覆盖$moviesbyid['similarmovie'],所以最后只会保留最后一个$value对应的电影数据。要把所有$value的查询结果都存进去,只需要把这个变量改成数组容器,每次循环把新结果追加进去就行,给你两种常用方案:
方案1:保存为多维数组(区分每个$value的结果)
如果需要在视图里区分不同$value对应的电影组,可以把结果存成多维数组:
// 先初始化数组,避免未定义警告 $moviesbyid['similarmovie'] = []; foreach ($gen as $value) { // 用[]语法将每次的查询结果追加到数组末尾 $moviesbyid['similarmovie'][] = $this->main_model->getsimilarmovies($value); } $this->load->view('home/check.php', $moviesbyid);
在视图home/check.php里可以这样遍历:
<?php foreach ($similarmovie as $genreMovieGroup): ?> <div class="movie-group"> <!-- 这里可以根据需要显示分类相关内容 --> <?php foreach ($genreMovieGroup as $movie): ?> <p><?php echo $movie->Title; ?></p> <!-- 替换成你表中的实际字段名 --> <?php endforeach; ?> </div> <?php endforeach; ?>
方案2:合并为一维数组(不区分$value,所有电影放一起)
如果不需要区分不同$value的结果,只想把所有电影合并成一个数组,可以用array_merge:
$moviesbyid['similarmovie'] = []; foreach ($gen as $value) { $currentMovies = $this->main_model->getsimilarmovies($value); // 将当前查询结果合并到总数组中 $moviesbyid['similarmovie'] = array_merge($moviesbyid['similarmovie'], $currentMovies); } $this->load->view('home/check.php', $moviesbyid);
视图里直接遍历所有电影即可:
<?php foreach ($similarmovie as $movie): ?> <p><?php echo $movie->Title; ?></p> <?php endforeach; ?>
另外补充个小建议:如果$gen数组可能为空,初始化数组的步骤能避免视图里出现“未定义变量”的警告,养成好习惯哦~
内容的提问来源于stack exchange,提问作者Gulzar Ali
相关产品推荐
相关产品推荐

