我在控制器中使用foreach循环
foreach ($x as $y) {
// do some stuff
// load view
$this->load->view('success', $data);
// $data can be multiple arrays
}
它完成了工作..但视图中的css,js,元素会重复...
请指导我如何使css,js只加载一次:)
感谢
答案 0 :(得分:1)
这是因为您在foreach语句中加载视图。每次循环遍历时,视图都会再次加载。您需要在循环中收集$data
,然后在循环结束后调用视图。
答案 1 :(得分:1)
foreach ($x as $y) {
// do some stuff
// $data can be multiple arrays
}
//load the view after the foreach has finished
$this->load->view('success', $data);
您当前正在循环的每次迭代中重复加载视图。像这样,它会在循环结束后加载它。
第二个想法
从您的代码中,我相信您在循环的每次迭代中重新分配您的$data
变量
foreach ($x as $y) {
// do some stuff
//
$data['array'] = array("here","is","an","array");
}
//load the view after the foreach has finished
$this->load->view('success', $data);
在上面的例子中,一旦加载了视图,$ data ['array']中就会有一个数组,因为你每次都会覆盖它。如果你想让$data['array']
像你建议的那样成为一个多级数组,试试这个......
foreach ($x as $y) {
// do some stuff
//
$data['array'][] = array("here","is","an","array");
}
//load the view after the foreach has finished
$this->load->view('success', $data);
这将附加$data['array']
而不是覆盖它,并且你最终会得到一个数组,其中包含整个循环中附加到它的任何内容。
答案 2 :(得分:1)
很可能“做一些事情”需要放在多维数组中,而不是直接放在$data
数组中。最好发布你的“做一些事情”和你的观点,但无论如何,你应该这样做:
$data_holder = array();
foreach ($x as $y) {
// do some stuff
$data_holder[] = $do_some_stuff_results;
}
$data['do_stuff_array'] = $data_holder;
$this->load->view('success', $data);
现在,您可以在视图中循环该变量,而不仅仅得到一个结果,可能是:
foreach ($do_stuff_array as $arr)
echo "<li><img src=\"" . $arr['img_src'] . "\" alt=\"" . $arr['img_title'] . "\" /></li>";