PHP - 切换数组条件


PHP - switch Array condition

>我有一个带有用户组 ID 的数组

$arr_user_group = array();

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

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

结果为 print_r($arr_用户_组(;

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

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

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

。最好的方法是什么?我在页面上的输出是例如"2",但我需要名称"成员">

if( isset($arr_user_group[0]) && '5'=== $arr_user_group[1] ) {
 $arr_user_group[1] = "Group5"; 
} 
$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
)
$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获取组名称。

对于带有开关的更复杂的解决方案,这应该有效:

$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只会在结果中出现一次。

或者,

如果您想要预定义的名称而不是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()分配给局部临时变量(循环外部(。但是对于此示例,像这样显示它更容易。

就这么简单?

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

$arr_user_group = array_map(function ($id) { return "Group$id"; }, $arr_user_group);