如何分解条件重构?

时间:2015-08-18 06:32:08

标签: php if-statement refactoring conditional

我在代码中遇到这种情况,我认为代码是不必要的复杂,我相信我可以重构它,使其更容易理解和阅读。 所以我用Google搜索并发现了分解条件重构,但我仍然怀疑如何进行重构

if(count($bagTypes) == 1 && (array_key_exists('type1', $bagTypes)
    || array_key_exists('type2', $bagTypes)
    || array_key_exists('type3', $bagTypes))){
        $flag = 1;
}

if(count($bagTypes) == 2 && (
    (array_key_exists('type1', $bagTypes) && array_key_exists('type2', $bagTypes)) ||
    (array_key_exists('type1', $bagTypes) && array_key_exists('type3', $bagTypes)) ||
    (array_key_exists('type2', $bagTypes) && array_key_exists('type3', $bagTypes)))
){
    $flag = 1;
}

有没有更好的方法呢?

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的事情:

$arrayKeys = array(
    'type1',
    'type2',
    'type3'
);

$bagTypesKeys = array_keys($bagTypes);

if ((count($bagTypes) == 1 && count(array_diff($arrayKeys, $bagTypesKeys)) < 3)
    || (count($bagTypes) == 2 && count(array_diff($arrayKeys, $bagTypesKeys)) < 2))
{
    $flag = 1;
}