我如何简化此代码,使其没有那么多 if 其他 if 语句


How can I simplify this code so it doesn't have so many if else if statements?

我很确定这可以简化,但我不确定如何简化。任何帮助将不胜感激!

foreach($color_count as $k => $v) {
        $index = count(json_decode($k, true));
        if($v < $max_color_count[$index]) {
            $diff = $max_color_count[$index] - $v;
            if($k == '["White","Blue","Black","Red","Green"]') { $this->add($filteredCards['White-Blue-Black-Red-Green'], $diff); }
            else if($k == '["White","Blue","Black","Red"]') { $this->add($filteredCards['White-Blue-Black-Red'], $diff); }
            else if($k == '["White","Blue","Black","Green"]') { $this->add($filteredCards['White-Blue-Black-Green'], $diff); }
            else if($k == '["White","Blue","Red","Green"]') { $this->add($filteredCards['White-Blue-Red-Green'], $diff); }
            else if($k == '["White","Black","Red","Green"]') { $this->add($filteredCards['White-Black-Red-Green'], $diff); }
            else if($k == '["Blue","Black","Red","Green"]') { $this->add($filteredCards['Blue-Black-Red-Green'], $diff); }
            else if($k == '["White","Blue","Black"]') { $this->add($filteredCards['White-Blue-Black'], $diff); }
            else if($k == '["White","Blue","Red"]') { $this->add($filteredCards['White-Blue-Red'], $diff); }
            else if($k == '["White","Blue","Green"]') { $this->add($filteredCards['White-Blue-Green'], $diff); }
            else if($k == '["White","Black","Red"]') { $this->add($filteredCards['White-Black-Red'], $diff); }
            else if($k == '["White","Black","Green"]') { $this->add($filteredCards['White-Black-Green'], $diff); }
            else if($k == '["White","Red","Green"]') { $this->add($filteredCards['White-Red-Green'], $diff); }
            else if($k == '["Blue","Black","Red"]') { $this->add($filteredCards['Blue-Black-Red'], $diff); }
            else if($k == '["Blue","Black","Green"]') { $this->add($filteredCards['Blue-Black-Green'], $diff); }
            else if($k == '["Blue","Red","Green"]') { $this->add($filteredCards['Blue-Red-Green'], $diff); }
            else if($k == '["Black","Red","Green"]') { $this->add($filteredCards['Black-Red-Green'], $diff); }
            else if($k == '["White","Blue"]') { $this->add($filteredCards['White-Blue'], $diff); }
            else if($k == '["White","Black"]') { $this->add($filteredCards['White-Black'], $diff); }
            else if($k == '["White","Red"]') { $this->add($filteredCards['White-Red'], $diff); }
            else if($k == '["White","Green"]') { $this->add($filteredCards['White-Green'], $diff); }
            else if($k == '["Blue","Black"]') { $this->add($filteredCards['Blue-Black'], $diff); }
            else if($k == '["Blue","Red"]') { $this->add($filteredCards['Blue-Red'], $diff); }
            else if($k == '["Blue","Green"]') { $this->add($filteredCards['Blue-Green'], $diff); }
            else if($k == '["Black","Red"]') { $this->add($filteredCards['Black-Red'], $diff); }
            else if($k == '["Black","Green"]') { $this->add($filteredCards['Black-Green'], $diff); }
            else if($k == '["Red","Green"]') { $this->add($filteredCards['Red-Green'], $diff); }
            else if($k == '["White"]') { $this->add($filteredCards['White'], $diff); }
            else if($k == '["Blue"]') { $this->add($filteredCards['Blue'], $diff); }
            else if($k == '["Black"]') { $this->add($filteredCards['Black'], $diff); }
            else if($k == '["Red"]') { $this->add($filteredCards['Red'], $diff); }
            else if($k == '["Green"]') { $this->add($filteredCards['Green'], $diff); }
        }
    }

看起来您的$k是一个 JSON 编码的数组,因此:

$array = json_decode($k);
$newKey = implode('-', $array);
$this->add($filteredCards[$newKey], $diff);