PHP中5个条件的If-else语句

PHP中5个条件的If-else语句,php,if-statement,Php,If Statement,我有一个场景,我必须用if-else语句匹配5个变量的所有可能条件,例如,变量的值可以是0或1 if($a === 0 && $b === 0 && $c === 0 && $d === 0 && $e === 0) { echo 'case_1'; } else if ($a === 1 && $b === 1 && $c === 1 && $d === 1 &&a

我有一个场景,我必须用if-else语句匹配5个变量的所有可能条件,例如,变量的值可以是0或1

if($a === 0 && $b === 0 && $c === 0 && $d === 0 && $e === 0) { 
    echo 'case_1';
} else if ($a === 1 && $b === 1 && $c === 1 && $d === 1 && $e === 1) {
    echo 'case_2';
} else if ($a === 0 && $b === 1 && $c === 1 && $d === 1 && $e === 1) {
    echo 'case_3';
} else if ($a === 0 && $b === 0 && $c === 1 && $d === 1 && $e === 1) {
    echo 'case_4';
} else if ($a === 0 && $b === 0 && $c === 0 && $d === 1 && $e === 1) {
    echo 'case_5';
} else if ($a === 0 && $b === 0 && $c === 0 && $d === 0 && $e === 1) {
    echo 'case_6';
} else if ($a === 1 && $b === 0 && $c === 0 && $d === 0 && $e === 0) {
    echo 'case_7';
} 

----
----
这种情况可能有几十种,管理起来也很复杂,所以我想知道是否有更好、更可靠的方法来实现这一点

更新:

变量也可以是字母数字

$none = 'none'; // Default value

if($a === $none && $b === $none && $c === $none && $d === $none && $e === $none) { 
    echo 'case_1';
} else if ($a === 1 && $b === 1 && $c === 1 && $d === 1 && $e === 1) {
    echo 'case_2';
} else if ($a === $none && $b === 1 && $c === 1 && $d === 1 && $e === 1) {
    echo 'case_3';
} else if ($a === $none && $b === $none && $c === 1 && $d === 1 && $e === 1) {
    echo 'case_4';
} else if ($a === $none && $b === $none && $c === $none && $d === 1 && $e === 1) {
    echo 'case_5';
} else if ($a === $none && $b === $none && $c === $none && $d === $none && $e === 1) {
    echo 'case_6';
} else if ($a === 1 && $b === $none && $c === $none && $d === $none && $e === $none) {
    echo 'case_7';
} 

------
------

我正试图想出一个更巧妙的方法,但现在;您可以将变量组合成字符串并检查:

switch($a.$b.$c.$d.$e) {
    case '11111':
        echo 'case_1';
        break;
        
    case '00000':
        echo 'case_2';
        break;
        
    //etc...
}
对于编辑,只需在以下情况下使用变量:

    case $none.$none.$none.$none.$none:
    //or 
    case $none.'1111':
    //etc

目前,我只能告诉您存在,但仅在PHP8中提供:

$case = match($a.$b.$c.$d.$e) {
    '00000' => 'case_0',
    '11111' => 'case_1',
    ...
    // default => something,
};

这只是一个“较小的”开关,不了解您的特定用例是什么,只是想检查什么本质上等同于某种编码状态。。。我冒昧地演示了一个经过充分演示的用例

这个例子的核心是parsecrumps函数,谁的抽象是这样的


函数parseCrumbs($crumbs,$transformer,$text=''){
//提供一个方法列表,根据位置执行某种转换
静态$places=['负'、'千'、'百'、'十'、'一'];
如果(是字符串($crumps))
$crumbs=str_split($crumbs,1);
//通过转换减少$crumns。。。
foreach(数组_combine($places,$crumps)作为$method=>$value){
如果($value)$text.=''.$transformer::$method($value,$text);
}
返回$text==''?--空--:$text.PHP\u EOL;
}
模拟用例演示:将一个5位置的状态字符串转换为表示单词总数


类转换{
静态公共函数($count,&$text){
若有($count)
return($text==''和({$count})个“?”({$count})个“:”和({$count})个“;
返回“”;
}
静态公共函数十($count,&$text){
若有($count)
返回“({$count})十”;
返回“”;
}
静态公共函数数百($count,&$text){
若有($count)
返回“({$count})数百”;
返回“”;
}
静态公共函数千($count,&$text){
若有($count)
返回“({$count})千”;
返回“”;
}
静态公共函数负($count,&$text){
若有($count)
返回“负”;
返回“”;
}
}
函数parsecrumps($crumps,$translations,$text=''){
静态$places=['负'、'千'、'百'、'十'、'一'];
如果(是字符串($crumps))
$crumbs=str_split($crumbs,1);
foreach(数组_combine($places,$crumps)作为$method=>$value){
如果($value)$text.=''.$translations::$method($value,$text);
}
return$text==''?--你需要钱--:$text.PHP\u EOL;
}

//这些示例使用字符串对状态进行编码,
//但是parsecrumps函数也可以接受数组。。。
echo parseCrumbs('00001',Transformations::class);//(1)1
echo parseCrumbs('00011',Transformations::class);//(1)十(1)个一
echo parseCrumbs('00111',Transformations::class);//(1)百(1)十(1)个一
echo parseCrumbs('00111',Transformations::class);//(1)百(1)十(1)个一
echo parseCrumbs('01111',Transformations::class);//(1)千(1)百(1)十(1)个
echo parseCrumbs('10001',Transformations::class);//减(1)个
echo parseCrumbs('10011',Transformations::class);//减(1)十(1)个一
echo parseCrumbs('10111',Transformations::class);//减(1)百(1)十(1)个一
echo parseCrumbs('10111',Transformations::class);//减(1)百(1)十(1)个一
echo语法分析器('11111',Transformations::class);//减(1)千(1)百(1)十(1)个1
为了演示排列

用于($i=5000;$i>0;$i--)
EchoParsecrumps(str_-pad($i,5,“0”,str_-pad_-LEFT),Transformations::class);
//(5)千
//(4)千(9)百(9)十和(9)一
//(4)千(9)百(9)十和(8)一
// ... 4996其他排列
//(1)1
如上所述建模时,根据您的转换,大约有49行代码。。。你有处理5000个州的逻辑

显然,您的用例需要定制,但“逻辑”可能仍然简单明了


在回顾了您的上述评论之后,我创建了一个示例,其中包含一个类似于复选框类型输入的数组

class衬衫选项{
公共函数构造(){
$this->options=(对象)[];
}
公共功能x_大型($州){
如果($state)$this->options->shirt\u size=“x\u large”;
}
公共功能xx_大型($state){
如果($state)$this->options->shirt\u size=“xx\u large”;
}
公共职能xxx_大型($州){
如果($state)$this->options->shirt\u size=“xxx\u large”;
}
公共职能小型(州){
如果($state)$this->options->shirt\u size=“small”;
}
公共功能自定义打印($state){
如果($国家){
$this->options->custom_printing=true;
}否则{
$this->options->custom\u printing=false;
}
}
公共函数templateID($state){
如果($国家){
$this->options->template\u id=$stat