2014-12-06 58 views
-2

我想檢查$ a的長度是否爲0或者長度是否爲0,然後檢查它是否是PHP中單個IF語句中的數字值。我試過但不工作&&和|| PHP中的單條件條件中的條件

$a = '23bc'; 
if((strlen($a)===0 || (strlen($a)>0 && ctype_digit($a)))) 
{ 
    echo 'Good to Go'; 
} 
else 
{ 
    echo 'Bad to Go'; 
} 

我不想在這裏應用嵌套條件。是否可以在單個IF語句中執行?

我在這裏發現了這個問題,但這並不回答什麼,我要求&& (AND) and || (OR) in IF statements

+0

所以你想檢查$ a是否等於0或$ a是數字嗎? – Rizier123 2014-12-06 21:04:22

+0

否我想檢查$ a的長度是0或如果它不是0,那麼檢查它是否是數字 – NoOneSeesMe 2014-12-06 21:07:16

+1

看起來像它對我有效:「不好走」,因爲它的長度大於0但不是全部數字 – 2014-12-06 21:07:17

回答

0

您可以通過書面形式消除一個條件:

if (strlen($a) === 0 || ctype_digit($a)) ... 

如果strlen的非零的右側||將被評估(在此時您知道strlen不爲零,因此不需要再次檢查)。


說了這麼多,你爲什麼不只是使用filter_var

$vars = array(1, "1", 1.1, "1.1", "1a", true, false, null); 
foreach ($vars as $var) { 
    $int = filter_var($var, FILTER_VALIDATE_INT); 
    if ($int === false) { 
     echo var_export($var) . " is bad\n"; 
    } else { 
     echo var_export($var) . " is good\n"; 
    } 
} 

輸出:

1 is good 
'1' is good 
1.1000000000000001 is bad 
'1.1' is bad 
'1a' is bad 
true is good 
false is bad 
NULL is bad 
+0

雖然這不是我的確切問題的答案,但它是下一次的好提示。謝謝 – NoOneSeesMe 2014-12-06 21:51:44

+0

你的問題的答案是:'if(strlen($ a)=== 0 || ctype_digit($ a)){}'(不需要檢查strlen兩次) – 2014-12-06 21:53:30

0

這將是很好知道你的腳本試圖實現除了在if條件中使用空行或數字字符串之外的單行數據。使用cytpe_digit()時,每個字符都必須評估爲一個數字才能成爲數字字符串。由於'bc'部分,你得到'23bc'的錯誤結果。

與腳本有問題的一個方面是,一個不知道哪個條件導致真實。其中一個或其他條件可能是真實的,或者它們都可能是假的。
參見演示:http://3v4l.org/8Pchk

你可以重寫代碼利用三元表達有一個襯墊,它消除了的if-else結構,如下:

<?php 
$a = '23bc'; 

if(strlen($a) != 0) { 
    echo ctype_digit($a)? "Good to Go\n" : "Bad to Go\n"; 
} 

下可能更符合你在做什麼問。這裏是最終的一行代碼:

<?php 
echo (!strlen($a) || ctype_digit($a))? "Good to Go\n" : "Bad to Go\n"; 

因爲身份操作===的嚴格,如果$ a爲空,那麼你就會看到「不好走的您既可以測試平等strlen($a) == 0,或者你可以。使用!運算符(boolean NOT)可以更加簡潔。參見demo:http://3v4l.org/7cfV0