可以在foreach循环中中断语句?

时间:2016-11-13 03:10:31

标签: php foreach

我有两张桌子(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;
}

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为您尝试做的是将组ID标识符更改为当前行中的组名称(如果它们匹配)。所以,替换:

$results['user_group']=$v_group_data['user_group_name'];

由:

$v_results['user_group']=$v_group_data['user_group_name'];

无论如何,加入的错误是什么?使SQL查询总是比多项式循环更快。

答案 1 :(得分:0)

据推测你会有这个:

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会更快/更好,但这应该可以得到你想要的结果,虽然我没有测试过,但它应该很接近。

相关问题