如果使用数组以防万一?

时间:2011-11-12 15:04:11

标签: php arrays case switch-statement

如果在交换机的情况下如何使用数组?这不起作用,并始终采用默认值(3):

    switch ($my_array) {

        case array('george','paul'):
            $id     = 1;
            break;
        case array('paul','max'):
            $id     = 2;
            break;
        case array('eric'):
            $id     = 3;
            break;

        //default
        default:
            $id     = 3;
            break;

    }

4 个答案:

答案 0 :(得分:4)

根据the PHP manual on array operators,您的示例应该有效:

  

$a == $b:如果$ a和$ b具有相同的键/值对,则为TRUE。

由于switch/case使用弱比较,因此使用==运算符对数组进行比较。

我在codepad上放了一个工作示例:http://codepad.org/MhkGpPRp

答案 1 :(得分:0)

switch()语句旨在匹配单个条件。我认为没有办法为此使用开关。您需要使用if else链:

if (in_array('george', $array) && in_array('paul', $array) && !in_array('max', $array)) {
  $id = 1;
}
else if(in_array('paul', $array) && in_array('max', $array)) {
 $id = 2;
}
else if (in_array('eric', $array)) {
  $id = 3;
}
else {
  $id = 3;
}

根据array operator rules,您可以使用==,但数组成员的顺序必须相同。从技术上讲,它只是必须匹配的键和值,但对于数字索引数组,这相当于成员具有相同的数字顺序。

if ($array == array('john', 'paul')) {
  $id = 1;
}
else if ($array == array('paul', 'max')) {
  $id = 2;    
}
else if ($array == array('eric')) {
  $id = 3;
}
else {
  $id = 3;
}

答案 2 :(得分:0)

PHP可以打开数组,但是你需要拥有与所有元素完全相同的键才能成功进行比较。您可能需要使用array_values()来规范化$ my_array的键。否则它应该工作。 $my_array = array('paul','max');应该给$ id = 2。

答案 3 :(得分:0)

您可以尝试使用以下内容:

switch (serialize($junctions)) {

    case serialize(array('george','paul')):
        $id     = 1;
        break;
    case serialize(array('paul','max')):
        $id     = 2;
        break;
    case serialize(array('eric')):
        $id     = 3;
        break;

    //default
    default:
        $id     = 3;
        break;

}

但你真的想要吗?