Php 你能帮我找到一种方法来循环数组吗?
我正在努力使用Php 你能帮我找到一种方法来循环数组吗?,php,codeigniter,loops,foreach,Php,Codeigniter,Loops,Foreach,我正在努力使用foreach函数。从我的数据库中,我检索到一个数组,该数组保存有关用户及其评论的信息。我的目标是在数组中循环并显示每个用户及其发表的评论。我遇到的问题是用户的口是心非。我想知道如何编写foreach的foreach,这样它总是选择一个用户一次,然后遍历他的所有评论,然后对下一个用户执行此操作。我希望这有意义。请看一下下面的代码,因为它可能会让您更好地了解我试图实现的目标 阵列示例 | user_id | u_name | u_email | u_access | comment_
foreach
函数。从我的数据库中,我检索到一个数组,该数组保存有关用户及其评论的信息。我的目标是在数组中循环并显示每个用户及其发表的评论。我遇到的问题是用户的口是心非。我想知道如何编写foreach的foreach
,这样它总是选择一个用户一次,然后遍历他的所有评论,然后对下一个用户执行此操作。我希望这有意义。请看一下下面的代码,因为它可能会让您更好地了解我试图实现的目标
阵列示例
| user_id | u_name | u_email | u_access | comment_id | car_id | car_comment | car_rating |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 6 | Jon | j@g.com | 3 | 15 | 3 | best car | 5 |
| 6 | Jon | j@g.com | 3 | 19 | 5 | hate it | 1 |
| 7 | Ben | b@g.com | 1 | 23 | 3 | awesome | 5 |
| 7 | Ben | b@g.com | 1 | 39 | 9 | ok | 3 |
控制器
$data['data'] = $this->User-m->get_users(); //returns $this->db->get();
$this->load->view('admin_v_b', $data);
<?php
$data = $this->User-m->get_users();
$users = someModelMethod($data);
$this->load->view('admin_v_b', array('users' => $users));
?>
查看
<?php foreach ($users as $user): ?>
<div class="user">
name: <?php echo $user['name'] ?>
email: <?php echo $user['email'] ?>
<div class="users_comments">
<?php foreach ($user['comments'] as $comment): ?>
comment: <?php echo $comment['comment'] ?>
rating: <?php echo $comment['rating'] ?>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
这是我目前的看法。正如您所看到的,这显然会导致用户显示的评论数量与他发布的评论数量一样多。我已经添加了关于何时由循环生成每个部分的注释
<?php foreach ($data->result() as $row): ?>
//this div is opened only on the 1st occurrence of the user's name
<div class="user">
//these two fields are also generated only on the 1st occurrence of the name
name: <?php echo $row->name ?>
email: <?php echo $row->email ?>
//this div and its contents is generated as many times as many comments the user has
<div class="users_comments">
comment: <?php echo $row->comment ?>
rating: <?php echo $row->rating ?>
</div>
//the div is closed after generating all the comments
</div>
<?php endforeach; ?>
//此div仅在用户名第一次出现时打开
//这两个字段也仅在名称第一次出现时生成
姓名:
电邮:
//此div及其内容的生成次数与用户的评论次数相同
评论:
评级:
//生成所有注释后,div关闭
谢谢大家的阅读。我感谢你的帮助。如果你需要更多的信息,尽管问我。另外,我没有包括get_users()
函数,因为我假设您不需要查看实际的查询,因为这就是全部内容
顺便说一句:我曾尝试在
foreach
函数之前声明$last\u user=“
,然后在循环过程中对其进行调整,但我无法正确生成DIV
。我愿意接受建议。:)新年快乐 您可以保留一个id数组,然后将代码包装在if语句中
if (in_array($user[user_id], $seen)) {
....
$seen[] = $user[user_id];
}
如果您想由用户对评论进行分组,只需为评论创建一个数组,并预先为exmaple进行分组
$comments = [];
foreach ($data as $comment) {
$comments[$comment['user_id']][] = $comment;
}
然后在模板中
foreach ($comments as $set) {
//user details
foreach ($set as $comment) {
//comment text
}
}
我收到了一封电子邮件,这是一件独特的事情,它将人们彼此分开 基于此假设,您可以尝试以下方法:
<div class="user">
<?php
$pre_userEmail = null;
foreach($data as $user){
if( $pre_userEmail != $user['email'] ){
echo $user['name'];
echo $user['email'];
}
if( $pre_userEmail == null ) // first init
$pre_userEmail = $user['email'];
echo "<div class='users_comment'>";
echo $user['comment'];
echo $user['raiting']
echo "</div>";
$pre_userEmail = $user[email];
}
?>
</div>
添加
是的,我有两种情况检查$user内容,但它们确实不同。第二个是我写的评论。它在循环中只运行一个,这是第一个init开始我的工作 第一个条件是人与人之间要分开 让我们尝试跟踪我的代码。 $pre_userEmail为空,因此打印个人信息,然后在数组列表中的第一个人出现init,然后打印他的评论和费率。在循环结束时,我将$pre_userEmail内容更改为我写评论的人
在第二个itration中,$pre_userEmail与$user['email']相等,因此他没有再次打印他的信息,第二个条件没有运行,因为它有内容。所以它工作正常首先,我要将该逻辑从控制器和视图中分离出来。然后,我将使用一个单独的
foreach
作为注释
型号
<?php
function someModelMethod ($data) {
$users = array();
foreach ($data->result() as $row) {
if ( ! array_key_exists($row->id, $users)) {
$users[$row->id] = array(
'id' => $row->id,
'name' => $row->name,
'email' => $row->email,
'access' => $row->access,
'comments' => array(),
);
}
$users[$row->id]['comments'][] = array(
'comment' => $row->comment,
'rating' => $row->rating,
);
}
return $users;
}
?>
控制器
$data['data'] = $this->User-m->get_users(); //returns $this->db->get();
$this->load->view('admin_v_b', $data);
<?php
$data = $this->User-m->get_users();
$users = someModelMethod($data);
$this->load->view('admin_v_b', array('users' => $users));
?>
查看
<?php foreach ($users as $user): ?>
<div class="user">
name: <?php echo $user['name'] ?>
email: <?php echo $user['email'] ?>
<div class="users_comments">
<?php foreach ($user['comments'] as $comment): ?>
comment: <?php echo $comment['comment'] ?>
rating: <?php echo $comment['rating'] ?>
<?php endforeach; ?>
</div>
</div>
<?php endforeach; ?>
姓名:
电邮:
评论:
评级:
是的,这与我对$last\u user
所做的差不多,但正如我所说的,我不知道如何形成if语句来生成。user\u comments
DIV位于该用户的主DIV内/好的,我已经尝试实现了另一个解决方案,但是我一直得到很多“undefinex索引”错误。是否确定不需要使用函数->result()
?为什么不调整get_users()函数,以便将数据发送到准备进行分析的视图?在视图中尝试执行的操作(操纵数组)必须在模型中执行。记住MVC的概念,这样就更容易将多维数组发送到所有已排序的视图。data=[user1=[]、user2[]、…]好的,但是我加入了两个表users
和car_comments
,我真的想不出应该如何将数据解析到视图中,这样它就有say array users和array user_注释,并且在用户之间循环,在注释之间循环。我该如何做才能使当用户没有发表评论时,我仍然在数组中得到空数组,等等。我能想到的唯一选项是调用另一个函数,比如说get\u users\u comments(user\u id)
,并在该用户的comments div中生成结果,但这似乎更复杂。好的。那么请给我指路。如果我有表格users
和表格car\u comments
两列ID、user\u ID、car\u ID、comment
我如何创建一个类似于[[用户1信息[他的所有评论]]…[用户99信息[他的所有评论]]的数组?这看起来不对。为什么在同一条件下将$pre_userEmail
设置为$user['email']
两次?或者,$user['email']
和$user[email]
之间有区别吗?另外,如果您第一次检查的是null
,是否应该在某个地方将其重置回null
?因为现在它再也不会达到空状态了,对吗?是的,我有两种情况检查$user内容,但它们确实不同。第二个是我写的评论。它在循环中只运行了一次,这是第一个init开始我的工作。第一个条件是人与人之间要分开。我爱你,伙计。非常感谢你。我已经试着把它全部写在纸上,看看它是如何通过数组的,等等。但是这个解决方案很棒。我正要尝试将结束div包装成类似