如何分解条件重构?

How to do decompose conditional refactoring?

我在代码中遇到过这种情况,我认为代码不必要地复杂,我相信我可以重构它以使其更易于理解和阅读。 所以我在谷歌上搜索了一下,发现分解条件重构,但我仍然怀疑如何进行重构

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;
}

有更好的方法吗?

您可以尝试这样的操作:

$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;
}