在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/人工智能/ 問(wèn)個(gè)簡(jiǎn)單的php編程邏輯判斷問(wèn)題

問(wèn)個(gè)簡(jiǎn)單的php編程邏輯判斷問(wèn)題

樓主遇到這樣一個(gè)問(wèn)題:
有10個(gè)人,分別是甲,乙,丙,丁,戊,己,庚,辛,壬,癸。
它們的優(yōu)先級(jí)別是甲>乙>丙>丁>戊>己>庚>辛>壬>癸。
現(xiàn)在有這樣一個(gè)需求。讓這10個(gè)人中的其中一個(gè)人去做一件事情。
根據(jù)他們優(yōu)先級(jí)別去選,
假設(shè)0=不在家,1=在家,若甲=1,就讓甲去做,若甲=0;就讓乙去做。若乙=1,就讓乙去做,若甲=0;就讓丙去做,以此類(lèi)推。
若使用php處理這類(lèi)問(wèn)題,我以前的做法是一層一層的嵌套if判斷,代碼如下:

<?php
if ($a == 0) {
    /*不在家的時(shí)候讓下一位去干*/
    if ($b == 0) {
        /*不在家的時(shí)候讓下一位去干*/
        if ($c == 0) {
            /*不在家的時(shí)候讓下一位去干*/
            if ($d == 0) {
                /*不在家的時(shí)候讓下一位去干*/
                if ($e == 0) {

                    /*不在家的時(shí)候讓下一位去干*/
                    if ($f == 0) {

                    /*不在家的時(shí)候讓下一位去干*/
                        if ($g == 0) {

                    /*不在家的時(shí)候讓下一位去干*/
                            if ($h == 0) {

                    /*不在家的時(shí)候讓下一位去干*/
                                if ($j == 0)
                                           {

                    /*不在家的時(shí)候讓下一位去干*/
                                    if ($k == 0) {

                    /*不在家的時(shí)候讓下一位去干*/
                                    } else
                                           {
                          /*在家的時(shí)候干的事  */
                                    }
                                } else {

                          /*在家的時(shí)候干的事  */
                                }
                            } else {

                          /*在家的時(shí)候干的事  */
                            }
                        } else {

                          /*在家的時(shí)候干的事  */
                        }
                    } else {
                        /*在家的時(shí)候干的事  */
                    }
                } else {
                    /*在家的時(shí)候干的事  */
                }
            } else {
                /*在家的時(shí)候干的事  */
            }
        } else {
            /*在家的時(shí)候干的事  */
        }
    } else {
        /*在家的時(shí)候干的事  */
    }
} else {
    /*在家的時(shí)候干的事  */
}
?>

后來(lái)覺(jué)得這種做法過(guò)于死板。不靈活。請(qǐng)問(wèn)各位大師更好更靈活的辦法解決此類(lèi)問(wèn)題?
后來(lái)覺(jué)得這種做法過(guò)于死板。不靈活。請(qǐng)問(wèn)各位大師更好更靈活的辦法解決此類(lèi)問(wèn)題?
麻煩給我簡(jiǎn)單的例子。

回答
編輯回答
伐木累

此問(wèn)題可以抽象一點(diǎn),
可以利用 foreach表驅(qū)動(dòng)法 來(lái)簡(jiǎn)化 if 判斷。
示例代碼如下:

<?php

/**
 * 假設(shè):
 *  甲 => $a
 *  乙 => $b
 *  丙 => $c
 *  丁 => $d
 */
const JIA   = 0;
const YI    = 1;
const BING  = 2;
const DING  = 3;

/* 應(yīng)該做什么事的方法映射表 */
$do_func_map = array(
    JIA     => function () { echo '甲去做一些事'; },
    YI      => function () { echo '乙去做一些事'; },
    BING    => function () { echo '丙去做一些事'; },
    DING    => function () { echo '丁去做一些事'; },
);

/* 各身份在家的情況 */
$conditon = array (
    JIA     => 0,
    YI      => 0,
    BING    => 1,
    DING    => 1
);

/* 去做事了 */
foreach ($conditon as $role => $role_cond) {
    if ($role_cond) {
        call_user_func($do_func_map[$role]);
        break;
    }
}

結(jié)果如下:

?  answer git:(master) ? php run.php
丙去做一些事
2018年8月21日 10:27
編輯回答
絯孑氣

采用配置文件,將你的策略寫(xiě)入配置文件,以二維數(shù)組為例:

$condition = [
    '1' => [
        'weight' => 10, // 這個(gè)策略的權(quán)重
        'deal_function' => 'jia',
        // other field
    ],
    '2' => [
        'weight' => 10,
        'deal_function' => 'yi',
        // other field
    ],
    '3' => [
        'weight' => 10,
        // other field
    ],
    '4' => [
        'weight' => 10,
        // other field
    ],
    '5' => [
        'weight' => 10,
        // other field
    ],
    // 

];

先對(duì)數(shù)據(jù)按照 weight 權(quán)重做排序,然后遍歷
PHP為例

function sort_weight_desc($a, $b)
{
    return $a['weight']>$b['weight']? -1:1;
}

uasort($condition, "sort_weight_desc") //

function all_deal_function($value) {
    switch ($value['deal_function']) {
        case 'jia':
            # code...
            break;
        
        case 'yi':
            # code...
            break;
        
        
        default:
            # code...
            break;
    }
}


foreach($condition as $key => $value){
    all_deal_function($value);
    // do something
}
2018年8月19日 03:52