2017-04-04 57 views
0

使用PHP 7.1.2-3 + deb.sury.org〜xenial + 1。PHP:檢查字符是否屬於一組字母的有效方法

我想寫一個條件,它檢查$ lastCharacter變量,看它是否是其中之一:K,Q,N,B,R

我開始是這樣的:

$lastCharacter = 'K'; 

if ($lastCharacter = 'K' || $lastCharacter = 'Q' || $lastCharacter = 'N' || $lastCharacter = 'B' || $lastCharacter = 'R') { 
    echo $lastCharacter . " is in series."; 
    // result: K is in series. 
} 

似乎有多餘重複$ lastCharacter =這麼多次。

然後我嘗試了以下操作,但它以某種方式操縱$ lastCharacter變量,使它等於1.猜測條件評估爲true,導致布爾值爲1。它仍然奇怪它如何改變變量。

$lastCharacter = 'K'; 

if ($lastCharacter = 'K' || 'Q' || 'N' || 'B' || 'R') { 
    echo $lastCharacter . " is in series."; 
    // result: 1 is in series. 
} 

是因爲$ lastCharacter突然等於1,我必須重新定義,以便能夠內的條件再次使用它。邊欄:爲什麼它會轉換爲1?

我見過這種方法的替代方法,他們檢查某個字符是否在字符串中,但我試圖測試一個字符串的最後一個字符是否是下列之一:K,Q,N, B,R.

有什麼想法?

回答

4

嘗試使用數組:

$series = array('K', 'Q', 'N', 'B', 'R'); 

if(in_array($lastCharacter, $series)) { 
    echo $lastCharacter . " is in series."; 
} 

如果你有,你可以使用一個連續範圍:

$series = range('M', 'X'); 
//or 
$series = range(1998, 2017); 

可能是更容易使用的字符串:

$series = 'KQNBR'; 

if(strpos($series, $lastCharacter) !== false) { 
    echo $lastCharacter . " is in series."; 
} 
0

要檢查是否相等,您必須使用==運算符。您每次寫入時重新分配變量$lastCharacter = 'SomeValue'

您在結果中獲得1的原因是因爲表達式'K' || 'Q' etc計算結果爲true(1),然後您將$ lastCharacter設置爲等於該表達式的值。

正確使用等號是這樣的...

$lastCharacter = 'K'; 

if ($lastCharacter == 'K' || $lastCharacter == 'Q' || $lastCharacter == 'N' || $lastCharacter == 'B' || $lastCharacter == 'R') { 
    echo $lastCharacter . " is in series."; 
} 

,或者嘗試使用值的數組像這樣

$lastCharacter = 'K'; 
if (in_array($lastCharacter, array('K', 'Q', 'N', 'B', 'R')) { 
    // do stuff 
} 
3

=是分配,==是比較。所以,你(通常)不想這樣:

if ($x = 1) ... 

但是(通常)本:

if ($x == 1) ... 

這就是說,你可以使用in_array()使你的代碼短一點:

if (in_array($lastCharacter, ['K','Q','N','B','R'])) ... 

編輯:爲了防止這個問題,一些程序員喜歡這樣寫比較:

if (1 == $x) ... 

這樣,如果您打錯了,而改爲使用單一的=,您將得到一個錯誤,而不是一個沉默的分配。這就是所謂的Yoda conditional,因爲它跟你通常說的方式有些背道而馳。

2

可能像這樣?

// Array of symbols and two strings just for testing 
$set = array('a', 'm', 'g'); 
$string1 = 'something'; 
$string2 = 'other'; 

// if latest symbol of $string1 is in the $set 
if (in_array(substr($string1, -1), $set)) { 
    // yes 
} 

// if latest symbol of $string2 is in the $set 
if (in_array(substr($string2, -1), $set)) { 
    // yes 
} 
0
<?php 
    $lastCharacter = 'K'; 
    $arrayOfValues = array('K', 'Q', 'N', 'B', 'R'); 
    if(in_array($lastCharacter,$arrayOfValues)) 
    { 
     // found 
    } 
?> 
0
$lastCharacter = 'K'; 
$characterSet = ['K', 'Q', 'N', 'B', 'R']; 

if (in_array($lastCharacter, $characterSet)) { 
    echo $lastCharacter . " is in series."; 
} 
相關問題