PHP:检查字符是否属于一组字母的有效方法
PHP: Effective way to check if character belongs to a set of letters
使用 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.
有什么想法吗?
要检查是否相等,您必须使用 ==
运算符。每次编写 $lastCharacter = 'SomeValue'
时都会重新分配变量
您在结果中得到 1 的原因是因为表达式 'K' || 'Q'
etc 的计算结果为真 (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) ...
但是(通常)是这样的:
if ($x == 1) ...
也就是说,您可以使用 in_array()
来缩短您的代码:
if (in_array($lastCharacter, ['K','Q','N','B','R'])) ...
编辑:为了防止这个问题,一些程序员喜欢这样写比较:
if (1 == $x) ...
这样一来,如果您输入错误而使用单个 =
,您将得到一个错误,而不是静默赋值。这称为 Yoda conditional,因为它有点倒退到您通常所说的方式。
尝试使用数组:
$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
}
<?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.";
}
使用 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.
有什么想法吗?
要检查是否相等,您必须使用 ==
运算符。每次编写 $lastCharacter = 'SomeValue'
您在结果中得到 1 的原因是因为表达式 'K' || 'Q'
etc 的计算结果为真 (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) ...
但是(通常)是这样的:
if ($x == 1) ...
也就是说,您可以使用 in_array()
来缩短您的代码:
if (in_array($lastCharacter, ['K','Q','N','B','R'])) ...
编辑:为了防止这个问题,一些程序员喜欢这样写比较:
if (1 == $x) ...
这样一来,如果您输入错误而使用单个 =
,您将得到一个错误,而不是静默赋值。这称为 Yoda conditional,因为它有点倒退到您通常所说的方式。
尝试使用数组:
$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
}
<?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.";
}