拉随机开关盒

时间:2012-04-26 11:07:06

标签: php switch-statement

我有一个开关功能,我希望能够随机拉出案例:

<?php
    function peopleGet($name) {
        switch ($name) { 

            case 'gloria': 
            echo 'gloria';
            break;

            case 'benjamin': 
            echo 'benjamin';
            break;

            case 'callum': 
            echo 'callum';
            break;
        }
    }
?>

我仍然需要能够提取特定的变量:

<?php peopleGet('gloria'); ?>

但是,是否可以使用相同的功能来拉随机(不重复)的情况?

3 个答案:

答案 0 :(得分:3)

答案是(而且你真的不应该)因为switch case语句是控制结构而不是数据结构,你会更好改为使用值数组,而不是重新调整单个值,您可以返回多个值

类似的东西:

<?php 
function peopleGet($name=null){
    $people = array('gloria'=>array('name'=>'Gloria',
                                    'age'=>'29',
                                    'location'=>'usa'),
                  'benjamin'=>array('name'=>'Benjamin',
                                    'age'=>'39',
                                    'location'=>'uk'),
                    'callum'=>array('name'=>'Callum',
                                    'age'=>'19',
                                    'location'=>'uk'));

    if($name==null){
        $keys = array_keys($people);
        shuffle($keys);
        return $people[$keys[mt_rand(0,count($people)-1)]];
    }else{
        return $names[$name];
    }                         
}
print_r(peopleGet());//random
print_r(peopleGet('gloria'));//gloria's array
?>

答案 1 :(得分:1)

这是你想要达到的目标吗?

$peopleArray=Array('gloria'   => 'gloria',
                   'benjamin' => 'benjamin',
                   'callum'   => 'callum');

使用以下内容获取明确的价值:$myPerson=$peopleArray['gloria'];

获取随机值:$myPerson=$peopleArray[array_rand($peopleArray)];

注意:array_rand manual - 从数组中选择一个或多个随机条目

答案 2 :(得分:0)

您指的是捕捉未定义案例的default:条款吗?

switch ($name) { 
    // Gloria
    case 'gloria': 
    echo 'gloria';
    break;

    // Benjamin
    case 'benjamin': 
    echo 'benjamin';
    break;

    // Callum
    case 'callum': 
    echo 'callum';
    break;

    default:
    echo $name; // or whatever that needs to happen if it is an undefined case
    break;
}