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的情况下加入它们。为了解决这个问题,我使用了double
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'];
作者:


不管怎样,连接有什么问题?进行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;
}