2017-02-16 94 views
2
長期邏輯條件

我怎麼能改善以下語句:更好的方法來寫PHP

if(!empty($var1) && !empty($var2) && !empty($var3) && !empty($var4) && !empty($var5) && !empty($var6) && !empty($var7)....) 

是否有一個PHP函數,允許邏輯條件鏈接?

感謝您的建議。

+2

你能保持你的變量數組和迭代,以確定是否有任何項目爲空... – user1859022

回答

4

你也可以嘗試這種方式,

$not_empty = false; 
$required_fields = [$var1,$var2,$var3,$var4,$var5,$var6,$var7]; 
foreach ($required_fields as $f) { 
    if (!empty($f)) { 
     $not_empty = true; 
    }else{ 
     $not_empty = false; 
     break; 
    } 
} 

if($not_empty){ 
    //good to go 
} 
+0

謝謝您的回覆! – alvarofvr

1

更可讀的,你可以把「羣體」(可能是一個或多個)的條件,並把它使多行:

if(!empty($var1) && 
    !empty($var2) && 
    !empty($var3) && 
    !empty($var4) && 
    !empty($var5) && 
    !empty($var6) && 
    !empty($var7) ...) { 

你還可以做什麼用issets和取消設置,你可以縮短:

if(!isset($var1) && 
    !isset($var2) && 
    !isset($var3) && 
    !isset($var4) && 
    !isset($var5) && 
    !isset($var6) && 
    !isset($var7) ...) { 

if(isset($var1, $var2, $var3, $var4, $var5, $var6, $var7)) { 
1

我會創建一個變量數組來檢查並循環查看它們是否爲空。

$check = array(
    'var1', 
    'var2', 
    'var3', 
    'var4', 
    'var5', 
    'var6', 
    'var7', 
); 


$empty = false; 
foreach($check as $value){ 
    if(empty(${$value})){ 
     $empty = true; 
     break; 
    } 
} 

if($empty){ 
    // there is an empty value 
} 
+0

謝謝你的迴應! – alvarofvr

2

我想你可以做這樣的事情:

$n = 7; 
$empty = false; 
foreach(range(1, $n) as $v) 
{ 
    if(empty(${'var' . $v})){ 
     $empty = true; 
    } 
} 

if(!$empty){ 
    echo 'no empty variables'; 
} 
+0

感謝您的回覆! – alvarofvr

2

迄今已提交的答案可以編寫成一個小工具功能。這是一個未經測試的函數,它接受可變數量的參數。

function all_empty() { 
    // Grab the number of arguments passed to the function. 
    $numberOfArguments = func_num_args(); 
    $arguments = func_get_args(); 
    $output = true; 

    // Return if nothing was passed. 
    if($numberOfArguments == 0) { 
    return; 
    } 

    // Check each passed argument, break on failure. 
    foreach($arguments as $argument) { 
    if(!empty($argument)) { 
     $output = false; 
     break; 
    } 
    } 

    return $output; 
} 

利用同樣的方法,我們可以寫一個叫none_empty功能:

function none_empty() { 
    // Grab the number of arguments passed to the function. 
    $numberOfArguments = func_num_args(); 
    $arguments = func_get_args(); 
    $output = true; 

    // Return if nothing was passed. 
    if($numberOfArguments == 0) { 
    return; 
    } 

    // Check each passed argument, break on failure. 
    foreach($arguments as $argument) { 
    if(empty($argument)) { // This is the only difference. 
     $output = false; 
     break; 
    } 
    } 

    return $output; 
} 

使用示例:

if(all_empty($var1, $var2, $var3)) { /* They're all empty */ } 
if(!all_empty($var1, $var2, $var3)) { /* Some of them aren't empty */ } 
if(none_empty($var1, $var2, $var3)) { /* They all have a value */ } 
if(!none_empty($var1, $var2, $var3)) { /* Some of them are empty */ } 

而且因爲我們寫的功能,能夠拍攝可變數量的參數,這也是可能的:

if(all_empty($var1, $var2, $var3, $var4, $var5, ...)) { } 
+0

謝謝你的迴應! – alvarofvr

0

也許這個解決方案:https://stackoverflow.com/a/13329035/1824143

function has_empty(array $array) 
{ 
    return count($array) != count(array_diff($array, array('', null, array()))); 
} 

$vars = [$var1,$var2,$var3,$var4,$var5,$var6,$var7]; 
if(!has_empty($vars)) 
{ 
    ... 
}