我需要检查字符串是否有多个键。有没有办法让它比下面的代码更简单:
$flag = substr($serial, 0, 1) == 'D' || substr($serial, 0, 1) == '1' || substr($serial, 0, 1) == 'B' || substr($serial, 0, 1) == 'E' ||substr($serial, 0, 1) == 'X' || substr($serial, 0, 1) == 'Z';
我需要类似下面的(无效)示例。请注意,我需要检查我的$ serial字符串的第一个位置是否存在任何此键(D,1,B等)。
$flag = substr($serial, 0, 1) in ('D','1','B','E','X','7');
谢谢!
答案 0 :(得分:4)
[]
表示法访问子字符串。in_array
样品:
$flag = in_array($serial[0], ['D','1','B','E','X','7']);
替代方案,因为这允许非常复杂的表达式,我认为你可能还需要它:
preg_match($serial, '/^[D1BEX7]/')
答案 1 :(得分:3)
我个人也使用正则表达式,因为它相对简洁:
preg_match("/^[D1BEX7]/", $serial)
但是如果你想使用低级字符串函数,strcspn
是一个合适的选择:
!strcspn($serial, "D1BEX7")
除非输入字符串以给定符号之一开头,否则返回正数。这就是为什么一个简单的!
否定就足以作为检查。 警告:输入字符串在这里不应为空。
答案 2 :(得分:1)
我认为这是你打算做的事情:
<?php
$arrFlags = array('D','1','B','E','X','7');
$needle = substr($serial, 0,1);
$flag = null;
if(in_array( $needle , $arrFlags) ){
//DO SOMETHING WITH THE $serial VARIABLE: IT CONTAINS ANY ONE OF ['D','1','B','E','X','7']
//PERHAPS, ASSIGN $needle TO THE VARIABLE $flag (REDUNDANT THOUGH)
$flag = $needle;
}
// IN A COMPACT WAY; YOU CAN REMOVE THE IF STATEMENT ABOVE (INCLUDING THE $flag VARIABLE) & WRITE:
$flag = ( in_array($needle, $arrFlags) ) ? $needle : null;
希望这段代码有帮助......