我最近发现了一种情况,其中我有两个相关变量,如果这两个变量是六个排列中的一个,我想要做几个排列。
作为变量数据范围的一个例子:
$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
语句是唯一可以接受的比较数据以做出逻辑决策的方法吗?
答案 0 :(得分:1)
在像PHP这样的语言中 - 很大程度上是在运行时解释 - 我认为这很好。实际上比“精细”更好:阵列开关简洁明了。
我认为不经常看到这样的事情的原因是像C ++或Java这样的语言不支持它们,因此探索这些解决方案的思维模式并没有得到很好的发展。当然,if
形式将在C ++中更好地优化,即使在C ++中创建了大约写入的重载方法。