【发布时间】:2021-09-15 14:05:03
【问题描述】:
我编写了一个开关,它需要匹配预定义数组中的任何组合,但现在只有在给定数组中的所有组合都成功时才匹配。但我想匹配数组中的任何组合。
示例:如果我的组合仅包含 'man','cisman',那么我的组合也需要成功并且需要返回 $result = "male.png";。但是如果给定组合以外的任何项目需要拒绝并需要返回默认情况。
$menCombo = ['man','cisman','transmasculine','transman'];
$womanCombo = ['woman','ciswoman','transfeminine','transwoman'];
switch($genderdetail) {
case count(array_intersect($menCombo, $genderdetail)) === count(($menCombo)):
case "man":
case "cisman":
case "transman":
case "transmasculine":{
$result = "male.png";
break;
}
case count(array_intersect($womanCombo, $genderdetail)) === count(($womanCombo)):
case "woman":
case "ciswoman":
case "transfeminine":
case "transwoman":{
$result = "female.png";
break;
}
default: {
$result = "others.png";
break;
}
}
【问题讨论】:
-
2 if else 条件实际上应该足够了。
-
我有一些其他的条件,这也是我使用 switch 的原因。
-
$genderdetail可能包含什么,您似乎同时拥有数组和奇异的可能性。 -
不使用开关来解决这个问题,多个 if-then-else 结构会更合适。即使您有其他其他条件(这意味着条件将是动态的),您仍然可以将此类数据存储到 db 表中,然后使用 select 语句来确定多个 if-then-else 条件是否符合您的要求。
-
如果
$genderdetail可以是字符串或数组,我会强制它始终为数组,以便您拥有一致的算法。
标签: php switch-statement