在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。基本上,这种逻辑是说,在某些月份的前两周的某些日子在某种程度上是特殊的。