【问题标题】:Switch case for array combination用于阵列组合的开关盒
【发布时间】:2021-09-15 14:05:03
【问题描述】:

我编写了一个开关,它需要匹配预定义数组中的任何组合,但现在只有在给定数组中的所有组合都成功时才匹配。但我想匹配数组中的任何组合。

示例:如果我的组合仅包含 'man','cisman',那么我的组合也需要成功并且需要返回 $result = "male.png";。但是如果给定组合以外的任何项目需要拒绝并需要返回默认情况。

Working demo

$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


【解决方案1】:

如 cmets 中所述,如果 $genderdetail 不是数组,则将其设为一个。现在,如果两个数组的数组差返回空,那么它肯定属于干草堆数组。

<?php

$genderdetail = ['man','cisman'];
$menCombo = ['man','cisman','transmasculine','transman'];
$womanCombo = ['woman','ciswoman','transfeminine','transwoman'];

$result = 'others.png';

if(!is_array($genderdetail)){
    $genderdetail = [ $genderdetail ];
}

if(empty(array_diff($genderdetail, $menCombo))){
    $result = 'male.png';
}else if(empty(array_diff($genderdetail, $womanCombo))){
    $result = 'female.png';
}

echo $result;

【讨论】:

    【解决方案2】:

    把计数条件改为

    case count(array_intersect($menCombo, $genderdetail)) === count(($genderdetail)):

    你计算的是数组可能,而不是一长串的可能性。女性人数也一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多