这是我的代码,用于检查两个元素的可能条件数量,是否有办法减少检查条件的数量(不是任何特定的检查规则)。
为什么我要问的是,我担心如果我添加一个额外的元素,它将以巨大的方式最大化检查条件。
我该怎么做?
这是我的代码:
<?php
$A = 'alpha';
$B = 'beta';
$result = '';
if($A != '' && $B !='')
{
$result .= 'Both has Value';
// both contains value
}
elseif($A != '' && $B =='')
{
$result .= 'Only A';
// only a contains value
}
elseif($A == '' && $B !='')
{
$result .= 'Only A';
// only b contains value
}
else
{
$result .= 'Both are Empty';
// both contains no value
}
echo $A.' - '.$B.'<br>';
echo $result;
?>
答案 0 :(得分:2)
试试这个......
<?php
$a="123";
$b="";
$c="33";
$result="";
if($a !="")
{
if($result=="")
{
$result .="a"; //Get value $a only
} else {
$result .=" and a"; //Get value $a with $b or $c
}
}
if($b !="" )
{
if($result=="")
{
$result .="b"; //Get value $b only
} else {
$result .=" and b"; //Get value $b with $a or $c
}
}
if($c !="")
{
if($result=="")
{
$result .="c"; //Get value $c only
} else {
$result .=" and c"; //Get value $c with $b or $a
}
}
echo $result;
?>
答案 1 :(得分:1)
if($A && $B)
{
$result .= 'Both has Value';
// both contains no value
}
elseif($A)
{
$result .= 'Only A';
// only a contains value
}
elseif($B)
{
$result .= 'Only B';
// only b contains value
}
else
{
$result .= 'Both are Empty';
// both contains value
}
echo $A.' - '.$B.'<br>';
echo $result;
答案 2 :(得分:1)
在结果中使用布尔标志。在这种情况下,位0(0或1)表示A为空或位2(0或2)表示B为空。
$flags = 0;
if ($A != '')
$flags |= 1; // Binary 0001 = 1
if ($B != '')
$flags |= 2; // Binary 0010 = 2
$rMsg = array ("Both empty", // 0 : 0000
"A only", // 1 : 0001
"B only", // 2 : 0010
"Both full"); // 3 : 0011
$result .= $rMsg [$flags];
我认为你正在寻找一个有用的校长,而不是确切的细节。这是你的想法吗?
更一般地说,给定一个项目数组(最多32或64,取决于MAX_INT):
$flags = 0;
for ($i = 0; $i < count ($items); $i++)
if ($items [$i] != '')
$flags |= 1<<$i;
// Flags start at bit 0
// To check if items 3, 7 and 10 are all filled:
$check = (1<<3)|(1<<7)|(1<<10);
if ($flags & $check == $check)
echo "all set!";
// To check if items 0, 5 and 8 are all empty:
$check = (1<<0)|(1<<5)|(1<<8);
if ($flags & ~$check == 0)
echo "all clear!";
答案 3 :(得分:1)
以更抽象的方式,这个有用的小功能:
function partition($ary, $predicate) {
$result = [[], []];
foreach($ary as $item)
$result[$predicate($item) ? 1 : 0] []= $item;
return $result;
}
根据某些条件将数组拆分为两部分,作为布尔函数给出。适用于您的具体问题:
$data = array('a', 'b', 'c', '');
list($bad, $good) = partition($data, 'boolval');
if(!$good)
echo 'all are falsy';
elseif(!$bad)
echo 'all are truthy';
else {
echo 'bad items: '; print_r($bad);
echo 'good items: '; print_r($good);
}
答案 4 :(得分:0)
检查我为此问题创建的程序。将变量放在数组中。你可以采取任何不。元素。
$array = array('alpha','beta','theta','gamma');
$result = array();
$final = '';
foreach($array as $key=>$value)
{
if($value != '')
{
array_push($result,$value);
if(sizeof($result) == 1)
$final .= $value;
else
$final .= ','.$value;
}
}
if(sizeof($result) == 0)
echo "All are Empty";
elseif(sizeof($result) == sizeof($array))
echo "All are Value";
else{
echo "Only ".$final;
}