Php 是否可能在foreach循环中中断语句?
我有两个表(Php 是否可能在foreach循环中中断语句?,php,foreach,Php,Foreach,我有两个表(user,user\u group)。其中用户表包含 ------------+-------------+------------------+ | user_id | user_name | user_group(id) | ------------+-------------+------------------+ 和用户组表包含 +-----------------+-------------------+ | user_group_id | user_g
user
,user\u group
)。其中用户表包含
------------+-------------+------------------+
| user_id | user_name | user_group(id) |
------------+-------------+------------------+
和用户组
表包含
+-----------------+-------------------+
| user_group_id | user_group_name |
+-----------------+-------------------+
现在我尝试在不使用join
query的情况下加入它们。为了解决这个问题,我使用了doubleforeach()
循环,但没有返回结果。我不能使用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'];
作者:
不管怎样,连接有什么问题?进行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
)
)
以及:
因此,为组创建一个新数组,使其看起来像这样(ID作为键,名称作为值):
为此:
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
会更快/更好,但这会让你得到你想要的结果,虽然我还没有测试过,但应该很接近。替换后-$v_results。。。这提供了相同的结果。但感谢您的查询建议@Peregring lk
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;
}