[英]Possible to break statement in foreach loop?
我有两个表( user
, user_group
)。 用户表所在的位置
------------+-------------+------------------+
| user_id | user_name | user_group(id) |
------------+-------------+------------------+
和user_group
表包含
+-----------------+-------------------+
| user_group_id | user_group_name |
+-----------------+-------------------+
现在,我尝试不使用JOIN
查询就加入他们。 为了解决这个问题,我使用了双重foreach()
循环,但是没有返回结果。 我不能使用break
语句。 如何使用循环获得所需的结果? 理想的结果将是:
+-----------+-------------+-------------------+
| user_id | user_name | user_group_name |
+-----------+-------------+-------------------+
到目前为止,我有:
public function user_get_item()
{
$this->db->select('*');
$this->db->from('users');
$results=$this->db->get()->result_array();
$this->db->select('*');
$this->db->from('user_group');
$group_data=$this->db->get()->result_array();
foreach($results as $v_results)
{
foreach($group_data as $v_group_data)
{
if($v_results['user_group']==$v_group_data['user_group_id'])
{
$v_results['user_group']=$v_group_data['user_group_name'];
}
}
}
return $results;
}
我认为您正在尝试通过匹配当前行中的组名来更改组ID标识符。 因此,请替换:
$results['user_group']=$v_group_data['user_group_name'];
通过:
$v_results['user_group']=$v_group_data['user_group_name'];
无论如何,联接有什么问题? 进行SQL查询的速度总是快于多重循环。
大概您将拥有:
Array(
0 => Array(
[user_id] => 1,
[user_name] => John Doe,
[user_group] => 200
),
1 => Array(
[user_id] => 2,
[user_name] => Jane Doe,
[user_group] => 100
)
)
和:
Array(
0 => Array(
[user_group_id] => 100,
[user_group_name] => Admin
),
1 => Array(
[user_group_id] => 200,
[user_group_name] => Web User
)
)
因此,为该组创建一个新数组,使其看起来像这样(ID作为键,Name作为值):
Array(
[100] => Admin,
[200] => Web User
)
要做到这一点:
public function getUserGroups()
{
$rows = array();
$this->db->select('*');
$this->db->from('user_group');
$group_data=$this->db->get()->result_array();
foreach($group_data as $results)
{
$rows[$results['user_group_id']] = $results['user_group_name'];
}
return $rows;
}
然后,您只需分配其他方法即可:
public function userGetItem()
{
# Get all the user groups
$groupData = $this->getUserGroups();
# Get your original user list
$this->db->select('*');
$this->db->from('users');
$results=$this->db->get()->result_array();
$row = array();
foreach($results as $users) {
$row[] = array(
'user_id' => $users['user_id'],
'user_name' => $users['user_name'],
# Here you assign the group name from the user groups array
'user_group_name' => $groupData[$users['user_group']]
);
}
return $row;
}
无论如何,我认为JOIN
会更快/更好,但这应该可以为您提供所需的结果,尽管我尚未对其进行测试,但应该接近。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.