Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:检查字符是否属于一组字母的有效方法_Php_String_Conditional - Fatal编程技术网

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

PHP:检查字符是否属于一组字母的有效方法,php,string,conditional,Php,String,Conditional,使用PHP7.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

使用PHP7.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变量,使其等于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


有什么想法吗?

要检查是否相等,必须使用
=
运算符。每次编写
$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
}

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

if ($x = 1) ...
但(通常)这是:

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

if (in_array($lastCharacter, ['K','Q','N','B','R'])) ...
编辑:为了防止这个问题,一些程序员喜欢这样写比较:

if (1 == $x) ...
这样,如果您键入并使用单个
=
,您将得到一个错误,而不是无声赋值。这被称为a,因为它有点像你通常说的那样。请尝试使用数组:

$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.";
}

大概是这样吧

// 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
}

// 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
}
<?php
  $lastCharacter = 'K';
  $arrayOfValues = array('K', 'Q', 'N', 'B', 'R');
  if(in_array($lastCharacter,$arrayOfValues))
  {
      // found
  }
?>
$lastCharacter = 'K';
$characterSet = ['K', 'Q', 'N', 'B', 'R'];

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