For 循环问题在 Codeigniter 4 中迭代一次
For Loop Problem Iterate Once in Codeigniter 4
我想知道我的代码是如何迭代一次的。它应该5次迭代。但是当我删除 return $result 时,它在视图中显示错误 Invalid argument supplied for foreach() 。我一直在尝试在 Model 中添加输出代码并删除 View 中的所有代码。最后它显示了我想要的 5 次迭代。但是,如何在视图中显示结果?
我的模型
public function getAllItem()
{
for($i=1; $i<=5; $i++){
for($j=$i+1; $j<=5; $j++){
$builder = $this->db->table('rating')
->select('user.idUser, user.nmUser, rating.idBengkel,
MAX( if(rating.idBengkel = '.$i.' , rating.nilai, 0 )) itemX,
MAX( if(rating.idBengkel = '.$j.' , rating.nilai, 0 )) itemY')
->join('user','user.idUser = rating.idUser', 'left')
->where('rating.idBengkel', $i)
->orWhere('rating.idBengkel', $j)
->groupBy('rating.idUser');
//var_dump($builder);
$query = $builder->get();
$result = $query->getResult();
return $result;
}
我的控制器
public function pcc_method()
{
$model = new Admin_model();
$data['all'] = $model->getAllItem();
echo view('templates/header', $data);
echo view('pcc_method',$data);
echo view('templates/footer');
}
我的看法
<table class="table table-bordered">
<thead class="thead-dark">
<tr>
<th scope="col">idUser</th>
<th scope="col">nmUser</th>
<th scope="col">itemX</th>
<th scope="col">itemY</th>
</tr>
</thead>
<tbody>
<!-- Looping select db from Admin.php -->
<?php foreach($all as $row):?>
<tr>
<td><?= $row->idUser;?></td>
<td><?= $row->nmUser;?></td>
<td class="text-center col-sm-3"><?= $row->itemX;?></td>
<td class="text-center col-sm-3"><?= $row->itemY;?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
请给我这个问题的解决方案。
问候!
这与 codeigniter 无关。它与原生 PHP.
有关
return
停止整个方法的执行,并且 return 将指示这样做的任何数据发送到调用您的方法的任何函数或方法。
如果你需要循环到运行 5次和return 5次迭代的输出,你需要将数据存储在一个辅助变量中然后return那个变量之后for 循环停止。
这里有很多选择。最简单的方法是在第一个循环开始之前创建一个新的 arrayObject ($temp = new ArrayObject();
),然后替换:
return $result
对于:
$temp->append($result);
这会将每次迭代的输出存储在临时对象中。
然后,在两个循环之外:
return $temp;
并且模型将return整个输出到控制器
很抱歉回答这个问题,因为问题在VIEW
,我已经问过我的朋友,他给出了很好的解决方案。就像 @Javier Larroulet
所说的那样,数组必须存储到新声明的 Array
中。在我的代码中,我使用 $all[]
存储数组 $result
。
型号
public function getAllItem()
{
for($i=1; $i<=5; $i++){
for($j=$i+1; $j<=5; $j++){
$builder = $this->db->table('rating')
->select('user.idUser, user.nmUser, rating.idBengkel,
MAX( if(rating.idBengkel = '.$i.' , rating.nilai, 0 )) itemX,
MAX( if(rating.idBengkel = '.$j.' , rating.nilai, 0 )) itemY')
->join('user','user.idUser = rating.idUser', 'left')
->where('rating.idBengkel', $i)
->orWhere('rating.idBengkel', $j)
->groupBy('rating.idUser');
//var_dump($builder);
$query = $builder->get();
$result = $query->getResult();
$all[] = $result;
}
}
return $all;
}
在 View 中,我正在检查 <?php echo $all[0][0]->idUser;?>
以显示结果,我明白了。然后我使用 nested loop
因为那是对应的。
查看
<?php foreach($all as $row):?>
<table class="table table-bordered">
<thead class="thead-dark">
<tr>
<th scope="col">idUser</th>
<th scope="col">nmUser</th>
<th scope="col">itemX</th>
<th scope="col">itemY</th>
</tr>
</thead>
<tbody>
<?php foreach($row as $key => $val):?>
<tr>
<td><?= $val->idUser;?></td>
<td><?= $val->nmUser;?></td>
<td class="text-center col-sm-3"><?= $val->itemX;?></td>
<td class="text-center col-sm-3"><?= $val->itemY;?></td>
</tr>
<?php endforeach;?>
<?php endforeach;?>
</tbody>
</table>
提前致谢!
我想知道我的代码是如何迭代一次的。它应该5次迭代。但是当我删除 return $result 时,它在视图中显示错误 Invalid argument supplied for foreach() 。我一直在尝试在 Model 中添加输出代码并删除 View 中的所有代码。最后它显示了我想要的 5 次迭代。但是,如何在视图中显示结果?
我的模型
public function getAllItem()
{
for($i=1; $i<=5; $i++){
for($j=$i+1; $j<=5; $j++){
$builder = $this->db->table('rating')
->select('user.idUser, user.nmUser, rating.idBengkel,
MAX( if(rating.idBengkel = '.$i.' , rating.nilai, 0 )) itemX,
MAX( if(rating.idBengkel = '.$j.' , rating.nilai, 0 )) itemY')
->join('user','user.idUser = rating.idUser', 'left')
->where('rating.idBengkel', $i)
->orWhere('rating.idBengkel', $j)
->groupBy('rating.idUser');
//var_dump($builder);
$query = $builder->get();
$result = $query->getResult();
return $result;
}
我的控制器
public function pcc_method()
{
$model = new Admin_model();
$data['all'] = $model->getAllItem();
echo view('templates/header', $data);
echo view('pcc_method',$data);
echo view('templates/footer');
}
我的看法
<table class="table table-bordered">
<thead class="thead-dark">
<tr>
<th scope="col">idUser</th>
<th scope="col">nmUser</th>
<th scope="col">itemX</th>
<th scope="col">itemY</th>
</tr>
</thead>
<tbody>
<!-- Looping select db from Admin.php -->
<?php foreach($all as $row):?>
<tr>
<td><?= $row->idUser;?></td>
<td><?= $row->nmUser;?></td>
<td class="text-center col-sm-3"><?= $row->itemX;?></td>
<td class="text-center col-sm-3"><?= $row->itemY;?></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
请给我这个问题的解决方案。 问候!
这与 codeigniter 无关。它与原生 PHP.
有关return
停止整个方法的执行,并且 return 将指示这样做的任何数据发送到调用您的方法的任何函数或方法。
如果你需要循环到运行 5次和return 5次迭代的输出,你需要将数据存储在一个辅助变量中然后return那个变量之后for 循环停止。
这里有很多选择。最简单的方法是在第一个循环开始之前创建一个新的 arrayObject ($temp = new ArrayObject();
),然后替换:
return $result
对于:
$temp->append($result);
这会将每次迭代的输出存储在临时对象中。
然后,在两个循环之外:
return $temp;
并且模型将return整个输出到控制器
很抱歉回答这个问题,因为问题在VIEW
,我已经问过我的朋友,他给出了很好的解决方案。就像 @Javier Larroulet
所说的那样,数组必须存储到新声明的 Array
中。在我的代码中,我使用 $all[]
存储数组 $result
。
型号
public function getAllItem()
{
for($i=1; $i<=5; $i++){
for($j=$i+1; $j<=5; $j++){
$builder = $this->db->table('rating')
->select('user.idUser, user.nmUser, rating.idBengkel,
MAX( if(rating.idBengkel = '.$i.' , rating.nilai, 0 )) itemX,
MAX( if(rating.idBengkel = '.$j.' , rating.nilai, 0 )) itemY')
->join('user','user.idUser = rating.idUser', 'left')
->where('rating.idBengkel', $i)
->orWhere('rating.idBengkel', $j)
->groupBy('rating.idUser');
//var_dump($builder);
$query = $builder->get();
$result = $query->getResult();
$all[] = $result;
}
}
return $all;
}
在 View 中,我正在检查 <?php echo $all[0][0]->idUser;?>
以显示结果,我明白了。然后我使用 nested loop
因为那是对应的。
查看
<?php foreach($all as $row):?>
<table class="table table-bordered">
<thead class="thead-dark">
<tr>
<th scope="col">idUser</th>
<th scope="col">nmUser</th>
<th scope="col">itemX</th>
<th scope="col">itemY</th>
</tr>
</thead>
<tbody>
<?php foreach($row as $key => $val):?>
<tr>
<td><?= $val->idUser;?></td>
<td><?= $val->nmUser;?></td>
<td class="text-center col-sm-3"><?= $val->itemX;?></td>
<td class="text-center col-sm-3"><?= $val->itemY;?></td>
</tr>
<?php endforeach;?>
<?php endforeach;?>
</tbody>
</table>
提前致谢!