如果在交换机的情况下如何使用数组?这不起作用,并始终采用默认值(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;
}
答案 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;
}
但你真的想要吗?