在切换的情况下如何使用数组?这不起作用,并且始终采用默认值(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;
}
根据the PHP manual on array operators,您的示例应该可以工作:
[
$a == $b
:如果$ a和$ b具有相同的键/值对,则为TRUE。
由于switch/case使用弱比较,所以使用==
运算符比较数组。
我已经将一个有效的示例放到了键盘上:http://codepad.org/MhkGpPRp
PHP可以打开数组,尽管您确实需要所有元素的键都完全相同才能使比较成功。您可能需要使用array_values()来规范$ my_array的键。否则它应该工作。 $my_array = array('paul','max');
应该给出$ id = 2。
您可以尝试使用类似这样的内容:
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;
}
但是您真的想要吗?
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;
}
这有效:
switch ($key) {
case in_array($key,['a','b']):
break;
default:
break;
}