Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用switch比较数组中的多个值_Php_Coding Style - Fatal编程技术网

在PHP中使用switch比较数组中的多个值

在PHP中使用switch比较数组中的多个值,php,coding-style,Php,Coding Style,我最近发现了一种情况,在这种情况下,我有两个相关的变量,它们有几个排列,如果这两个变量是六个排列中的一个,我想做一个动作 作为变量数据范围的示例: $months = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); $days = array('Monday', 'Tuesday'

我最近发现了一种情况,在这种情况下,我有两个相关的变量,它们有几个排列,如果这两个变量是六个排列中的一个,我想做一个动作

作为变量数据范围的示例:

$months = array('January', 'February', 'March', 'April', 'May', 'June', 'July',
    'August', 'September', 'October', 'November', 'December');
$days = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday');

$month = $months[array_rand($months)];
$day = $days[array_rand($days)];
$week = rand(1, 4);
我想到的是一个简单的数组开关比较,如下所示:

function checkInputForCriteria($month, $day, $week)
{
    switch (array($month, $day))
    {
        case array('January', 'Wednesday'):
        case array('February', 'Monday'):
        case array('April', 'Tuesday'):
        case array('July', 'Saturday'):
        case array('September', 'Thursday'):
        case array('September', 'Tuesday'):
            return (in_array($week, array(1, 2)));
    }

    return FALSE;
}
通常情况下,这将被写为:

function checkInputForCriteria($month, $day, $week)
{
    if (
        ($month == 'January' && $day == 'Wednesday')
        || ($month == 'February' && $day == 'Monday')
        || ($month == 'April' && $day == 'Tuesday')
        || ($month == 'July' && $day == 'Saturday')
        || ($month == 'September' && $day == 'Thursday')
        || ($month == 'September' && $day == 'Tuesday')
    )
    {
        return ($week == 1 || $week == 2);
    }

    return FALSE;
}
虽然我意识到switch-case-array方法并不常用,但我认为没有任何编码标准理由不使用它。PHP完全按照看起来的样子比较数组中每个元素中的数据是没有问题的。它是紧凑的,值数组元素和每个比较数组元素之间有直接的顺序关系。我认为不使用这种方法的唯一原因是它是CPU密集型还是内存密集型(我还没有测试)

仅基于编码标准的含义,您是否会在自己的代码中接受这种用法?如果你在别人的代码中看到了这一点,只是浏览过去的代码,那么你理解发生了什么会有困难吗


如果这种类型的结构仅仅因为不是我们通常看到/期望的结构而被禁止,那么引入结构来比较上述示例中所需的数据的方法是什么?基本
if
语句是比较数据以做出逻辑决策的唯一可接受的方法吗?

在PHP这样的语言中,它主要是在运行时解释的,我认为这很好。实际上比“精细”更好:数组开关简洁明了,切中要害


我认为这些事情经常不被看到的原因是像C++或java这样的语言不支持他们,所以探索这种解决方案的思维模式并没有真正得到充分的发展。当然,如果代码的编写方法在C++中被优化了,即使是一个重写的C++编写方法,它也会在C++中得到更好的优化。

我想进一步解释一下你正在做的是什么。我不确定我是否理解您为什么返回1和2作为周数。@TomGranot ScalosAb它不是返回1或2作为周数,而是检查它是在哪个月的哪个星期返回的。该函数根据许多特定于业务的逻辑返回true或false。基本上,这种逻辑是说,在某些月份的前两周的某些日子在某种程度上是特殊的。