0

我有一个包含用户组 ID 的数组

$arr_user_group = array();

和一个从我的数据库中选择所有用户及其用户组的查询

array_push($arr_user_group, $row3['group']);

结果 print_r($arr_user_group);

Array ( [0] => 2 [1] => 5 [2] => 3 [3] => 5 [4] => 1) 

现在我需要为每个数字 ([...] => number(2,5,3,5,1)) 分配一个名称,例如

1 = Admin 
2 = Member
3 = Ipsum
4 = Lorem
5 = Guest

...做这个的最好方式是什么?我在页面上的输出例如是“2”,但我需要名称“Member”

if( isset($arr_user_group[0]) && '5'=== $arr_user_group[1] ) {

 $arr_user_group[1] = "Group5"; 

} 
4

5 回答 5

2
$arr_user_group = Array(2, 5, 3, 5, 1);

foreach($arr_user_group as &$group) {
    switch($group) {
        case 1: 
            $group = 'Admin';
            break;
        case 2: 
            $group = 'Member';
            break;
        case 3: 
            $group = 'Ipsum';
            break;
        case 4: 
            $group = 'Lorem';
            break;
        default:
            $group = 'Guest';
    }
}

print_r($arr_user_group);

输出:

Array
(
    [0] => Member
    [1] => Guest
    [2] => Ipsum
    [3] => Guest
    [4] => Admin
)

注意: 当您从数据库接收数组时,最好创建一个包含两列的新表 (user_groups):idname. JOIN然后,您可以在查询中通过简单的方式获取组名。

于 2013-06-07T08:08:07.813 回答
2
$arr_user_group = array(2, 5, 3, 5, 1);

$groupNames = array (1 => 'Admin', 
                     2 => 'Member',
                     3 => 'Ipsum',
                     4 => 'Lorem',
                     5 => 'Guest');

$lenght = count($arr_user_group);

for ($i = 0; $i < $lenght; $i++) {
    $arr_user_group[$i] = $groupNames[$arr_user_group[$i]];
}

echo '<pre>' . print_r($arr_user_group, true) . '</pre>';

//print

Array
(
    [0] => Member
    [1] => Guest
    [2] => Ipsum
    [3] => Guest
    [4] => Admin
)
于 2013-06-07T08:21:16.707 回答
1

或者,如果您想要预定义的名称而不是 groupX,则可以采用这种方式:

<?PHP

$arr_user_group = Array(2, 5, 3, 5, 1, 10, 0);
$arr_group_names = Array("None", "Admin", "Member", "Ipsum", "Lorem", "Guest");

foreach($arr_user_group as &$element) {
    $element = ($element < count($arr_group_names)) ? $arr_group_names[$element] : $arr_group_names[0];
}

print_r($arr_user_group);

输出:

Array
(
    [0] => Member
    [1] => Guest
    [2] => Ipsum
    [3] => Guest
    [4] => Admin
    [5] => None
    [6] => None
)

您当然可以设置不同的“默认”值。这样,您可以让您的组名来自数据库,而您的组名则来自$arr_group_names数据库。可能更容易管理而不是硬编码它们。

更新: 我在循环中直接使用了 count() 。如果 $arr_user_group 中有很多元素,这可能会导致显着的性能损失,因为每次迭代计数都会重新计算。最好分配count()给局部临时变量(循环外)。但是对于这个例子来说,像这样显示它更容易。

于 2013-06-07T08:18:33.650 回答
1

对于带有开关的更复杂的解决方案,这应该可以工作:

$arr_user_group_in = Array(2, 5, 3, 5, 1);
$arr_user_group = array_map(function ($id) { 

switch($id){

    case 1:
        return 'Admin';
        break;

    case 2:
        return 'Member';
        break;  

    case 3:
        return 'Ipsum';
        break;  

    case 4:
        return 'Lorem';
        break;  

    case 5:
        return 'Guest';
        break;

}

}, $arr_user_group_in);

print_r(array_combine($arr_user_group_in, $arr_user_group));
// output: Array ( [2] => Member [5] => Guest [3] => Ipsum [1] => Admin ) 

请注意,5作为重复键只会在结果中出现一次。

于 2013-06-07T08:19:28.003 回答
0

就这么简单?

foreach ($arr_user_group as &$id) {
    $id = "Group$id";
}

或者

$arr_user_group = array_map(function ($id) { return "Group$id"; }, $arr_user_group);
于 2013-06-07T08:08:55.540 回答