PHP:检查字符是否属于一组字母的有效方法

时间:2017-04-04 20:11:18

标签: php string conditional

使用PHP 7.1.2-3 + deb.sury.org~xenial + 1。

我正在尝试写一个条件来检查$ 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.猜测条件评估为真,导致布尔值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。

有什么想法吗?

6 个答案:

答案 0 :(得分: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.";
}

答案 1 :(得分:3)

=是作业,==是比较。所以你(通常)不想要这个:

if ($x = 1) ...

但是(通常)这个:

if ($x == 1) ...

也就是说,您可以使用in_array()来缩短代码:

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

编辑:为了防止这个问题,一些程序员喜欢用这种方式编写比较:

if (1 == $x) ...

这样,如果您输入错误而改为使用单=,则会收到错误而不是静默分配。这被称为Yoda conditional,因为它有点像你通常所说的那样倒退。

答案 2 :(得分: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
}

答案 3 :(得分:0)

要检查是否相等,您必须使用==运算符。每次编写$lastCharacter = 'SomeValue'

时,都会重新分配变量

你在结果中获得1的原因是因为表达式'K' || 'Q'等计算为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
}

答案 4 :(得分:0)

<?php
  $lastCharacter = 'K';
  $arrayOfValues = array('K', 'Q', 'N', 'B', 'R');
  if(in_array($lastCharacter,$arrayOfValues))
  {
      // found
  }
?>

答案 5 :(得分:0)

$lastCharacter = 'K';
$characterSet = ['K', 'Q', 'N', 'B', 'R'];

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