这种情况可以缩短吗? (if / else条件)

时间:2014-12-12 12:09:58

标签: php

我有条件:

    if($about AND $desc) 
    {
        if($about > $desc) {
            $description = $about;
        }
        else {
            $description = $desc;
        }
    }
    else 
    {
        if($about AND !$desc) {
            $description = $about;
        }
        elseif (!$about AND $desc) {
            $description = $desc;
        }
        else { 
            $description = 'No description';
        }
    }

对我而言似乎太大了。我认为它可以以某种方式缩短,但不知道如何...任何建议?

3 个答案:

答案 0 :(得分:6)

检查$about$desc是否真实,并使用三元运算符:

if ($about || $desc) {
    $description = ($about > $desc ? $about : $desc);
} else {
    $description = 'No description';
}

如果你真的希望缩短它(以及限制可读性,我不建议),你可以把整个事情变成三元:

$description = (($about || $desc) ? ($about > $desc ? $about : $desc) : 'No description');

答案 1 :(得分:1)

或制作一个函数并使用return

function getDescription($about, $desc) {

  if (!$about && !$desc)
        return 'No description';

  if ($about > $desc)
        return $about;

  return $desc;
}

$description = function($about, $desc) {

  if (!$about && !$desc)
        return 'No description';

  if ($about > $desc)
        return $about;

  return $desc;
};

答案 2 :(得分:1)

完善@ h2ooooooo提供的答案,您可以将($about > $desc ? $about : $desc)替换为max($about, $desc)来进一步简化,以获得此结果:

$description = ($about || $desc) ? max($about, $desc) : 'No description';

因为max()可以比较任何事情,所以你可以更简单,比如:

$decription = max($about, $desc) ?: 'No description';