繁体   English   中英

可能在foreach循环中破坏语句吗?

[英]Possible to break statement in foreach loop?

我有两个表( useruser_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM