$result = ''; switch (date('w')){ case 0: $result ='星期日';break; case 1: $result ='星期一';break; case 2: $result ='星期二';break; case 3: $result ='星期三';break; case 4: $result ='星期四';break; case 5: $result ='星期五';break; default: $result ='星期六'; } return $result;
编程人员一般采用下面的方式,将星期组织成一个数组(可以称作表),安卓索引取出对应的汉字。
$map= array('星期日','星期一','星期二','星期三','星期四','星期五','星期六'); return $map[date('w')];
这就是表驱动,在大家的编程生涯中或多或少都接触过,只是没有提出来总结一下,现在是不是觉得自己的实现方式很高大上了。
表驱动法是一种编程模式,从表里面查找信息而不是使用逻辑语句(if…else…switch)。
上面只是一维表驱动,下面扩展正多维,先看一个二维的例子,这也是表驱动经典的例子了。
《星际穿越》(原来例子不是这样描述滴)中人类生产食物的总和有限,不得不根据对象的特点进行食物的分配,规则如下
18岁以下男可以领取100斤食物
18-60岁男可以领取120斤食物
60岁以上男可以领取100斤食物
18岁以下女可以领取90斤食物
18-60岁女可以领取110斤食物
60岁以上女可以领取95斤食物
if....else...方式
function getFoodWeight($age, $gender) { if ($age < 18) { if ($gender) { $food = 100; } else { $food = 90; } } else if ($age > 60) { if ($gender) { $food = 100; } else { $food = 95; } } else { if ($gender) { $food = 120; } else { $food = 110; } } return $food; }
表驱动方式,第一维度为年龄,第二维度为性别
$config = array( array(90, 100), array(110, 120), array(95, 100), ); function getFoodWeight($age, $gender) { global $config; $ageDimension = ($age - 18 > 0) + ($age - 60 > 0); $genderDimension = $gender; return $config[$ageDimension][$genderDimension]; }
表驱动方式是不是使代码能够使代码简单、明了,便于维护。
忽然有一天开始加入身材胖、正常、瘦因子进行食物分发,就是如下的规则
18岁以下男胖子可以领取100斤食物
18岁以下男瘦子可以领取100斤食物
........
那就是三维表驱动啦。