如何使用数组以防万一?

问题描述 投票:0回答:5

在切换的情况下如何使用数组?这不起作用,并且始终采用默认值(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;

    }
php arrays case switch-statement
5个回答
4
投票

根据the PHP manual on array operators,您的示例应该可以工作:

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

由于switch/case使用弱比较,所以使用==运算符比较数组。

我已经将一个有效的示例放到了键盘上:http://codepad.org/MhkGpPRp


0
投票

PHP可以打开数组,尽管您确实需要所有元素的键都完全相同才能使比较成功。您可能需要使用array_values()来规范$ my_array的键。否则它应该工作。 $my_array = array('paul','max');应该给出$ id = 2。


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;

}

但是您真的想要吗?


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;
}

0
投票

这有效:

switch ($key) {
    case in_array($key,['a','b']):
         break;
    default:
         break;
}
© www.soinside.com 2019 - 2024. All rights reserved.