Сокращение количества условий для всех возможностей

Вот мой код для проверки количества возможных условий для двух элементов. Есть ли способ уменьшить количество условий проверки (нет какого-либо конкретного правила проверки).

Почему я спрашиваю, я боюсь, что, если я добавлю дополнительный элемент, это значительно увеличит условия проверки.

Как я могу это сделать?

Вот мой код:

<?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

Решение

Попробуй это…

<?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;
?>
2

Другие решения

как насчет этого? Я просто удалил лишнюю проверку.

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;
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!";
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);
}
1

Проверьте эту программу, которую я создал только для этого вопроса. Вот ваши переменные в массиве. Вы можете принять любое нет. элементов.

$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;
}
0
По вопросам рекламы [email protected]