`
OrangeHolic
  • 浏览: 260728 次
  • 来自: 北京
社区版块
存档分类
最新评论

减少if...else...的表驱动

    博客分类:
  • PHP
阅读更多
先从一个常见的问题入手,在页面中显示今天的星期,如果还用下面的方式,那就需要好好看看本文章了
$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斤食物
........
那就是三维表驱动啦。
分享到:
评论

相关推荐

    Test_if_lez.rar_If...

    1. C语言基础:包括变量、数据类型、控制流(如if...else语句)、函数等。 2. 测试框架:理解DxTestCase的使用方法,可能包括断言、测试套件、测试用例的组织和执行流程。 3. 嵌入式Linux编程:如何在有限的硬件资源...

    Oracle驱动包ojdbc6-11.2.0.3

    Oracle驱动包ojdbc6-11.2.0.3是Oracle公司提供的Java数据库连接(JDBC)驱动程序,主要用于Java应用程序与Oracle数据库之间建立连接,进行数据交互。这个版本的驱动符合Java SE 6(Java Development Kit, JDK 6)的...

    表驱动 词法分析cminus

    在C-Minus语言的词法分析过程中,采用表驱动方法不仅能够简化代码结构,提高代码的可读性和可维护性,还能有效地减少代码量,提高编程效率。 #### 表驱动算法简介 表驱动算法的核心思想是利用表格存储各种状态转换...

    extcon驱动及其在USB驱动中的应用.doc

    在extcon驱动出现之前,同一份USB控制器驱动代码,比较常见的做法就是在设备树(dts)中指明是哪种接口,USB控制器驱动代码中会解析设备树中的定义,通过if...else...来走不同的代码逻辑。如果是MicroB接口,就注册...

    Excel VBA 基础教程

    目 录 一、VBA语言基础...................................................................................................................1 第一节 标识符....................................................

    Excel-VBA宏编程实例源代码-工作表的操作-商品促销表.zip

    **商品促销表操作**:在这个实例中,可能涉及到的操作包括读取、修改和更新商品促销信息,这可能需要用到VBA的`Range.Value`属性来获取或设置单元格值,`For Each`循环遍历数据,以及条件判断语句(如`If...Then......

    ios-TableView添加,减少cell的个数.zip

    if sender.tag == 1 { // 假设1代表增加,2代表减少 newCount += 1 } else { if newCount &gt; 0 { newCount -= 1 } } // 更新表格数据源 dataSource.array.append("新数据") // 如果是增加 dataSource....

    vue.js 使用v-if v-else发现没有执行解决办法

    v-if和v-else是Vue.js中的控制指令,用于条件性地渲染一块内容。这些内容只会在指令表达式返回真值时才会渲染。 当使用v-if和v-else遇到问题,尤其是它们没有按预期工作时,可能是由于几个原因造成的。文章中提到的...

    2021-2022计算机二级等级考试试题及答案No.17576.docx

    4. `switch`语句在某些编程语言中可以转换为`if...else if...else`结构,实现多分支选择。 5. 面向对象设计方法强调使用现实世界的概念来抽象思考问题,通过对象和类的概念来组织代码,而不是单纯关注算法。 6. ...

    2021-2022计算机二级等级考试试题及答案No.10160.docx

    11. **switch语句**:switch语句可以用一系列if...else if...else语句来改写。 12. **REVOKE语句**:使用REVOKE语句会撤销用户的某些权限,但不会删除用户本身。 13. **数据库系统核心**:数据库管理系统(DBMS)...

    Excel.2007.VBA.Programming.For.Dummies.pdf

    - **流程控制**:掌握条件语句(如If...Then...Else)、循环(如For...Next、Do...Loop)以及错误处理(如On Error GoTo)。 - **函数和过程**:创建自定义函数和子程序,提高代码的重用性和可维护性。 #### 4. ...

    源代码,qtp实例教程

    例如,我们可以使用`For...Next`循环来重复执行登录动作,`If...Then...Else`语句则用于判断登录是否成功,根据返回的结果执行不同的后续步骤。 1. **循环结构**:在QTP中,`For...Next`循环常用于重复执行某一操作...

    VB课设报告样例共13页.pdf.zip

    2. **控制结构**:涵盖条件语句(If...Then...Else)、循环语句(For...Next、While... Wend等)以及选择结构(Select Case)的使用。 3. **函数和过程**:解释如何定义和调用自定义函数和过程,以实现代码模块化。...

    全国计算机3月等级考试二级access试题及答案.pdf

    2. **多级条件语句**: “IF...THEN...ELSE...”结构用于实现多级条件判断逻辑。 3. **循环控制**: 循环结构在VBA中的应用,如“FOR...NEXT”和“Do While...”循环。 4. **字符串函数**: 文件中使用了多个字符串...

    s3c2410fb.c_LCD驱动源代码

    这种方式便于开发过程中调试,也方便在最终版本中关闭不必要的输出以减少性能开销。 ##### 3. CPU型号检测 ```c static int is_s3c2412(struct s3c2410fb_info *fbi) { return (fbi-&gt;drv_type == DRV_S3C2412); }...

    VB+SQL宿舍管理系统.rar

    3. 代码逻辑:使用VB语句(如If...Then...Else,For...Next,While...Wend等)编写处理事件的程序逻辑。 4. 对象:具有属性、方法和事件的实体,例如窗体、控件都是对象。 5. 类与对象:VB支持面向对象编程,允许...

    Proe&#40;CREO&#41;如何用参数控制零件装配(PROGRAM程序设计全解析).doc

    elseif a="###2" & b="###2" tag1="big002" endif ``` 这段关系表达式根据a和b的值,将tag1设定为对应零件的名称。这样,我们可以通过调整a和b的值来控制装配体中零件的选择。 接着,打开Pro/E(Creo)的PROGRAM模型...

    VB精简版—— 6.0

    此外,VB6支持基本的编程结构,如顺序、选择(If...Then...Else)、循环(For...Next,Do...Loop)等,以及函数和过程的定义。通过这些结构,开发者可以构建出逻辑清晰、功能丰富的应用程序。同时,VB6还提供了大量...

    24.C语言程序设计--二手房信息管理系统.docx

    【二手房信息管理系统】是一个基于C语言的程序设计项目,旨在训练学生的编程技能,特别是对C语言文件和...通过实际操作,学生能够深入理解结构体、链表、文件操作以及控制语句(如for、switch、if...else)的用法。

Global site tag (gtag.js) - Google Analytics