我需要检查一个字符串是否有几个键。有没有办法让它比下面的代码更简单:
$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';
我需要一些类似下面(无效)例子的东西。注意,我需要检查这些键(D、1、B等)是否存在于$serial字符串的第一个位置。
$flag = substr($serial, 0, 1) in ('D','1','B','E','X','7');
谢谢!
- 您可以使用
[]
表示法访问子字符串 in_array
样品:
$flag = in_array($serial[0], ['D','1','B','E','X','7']);
替代方案,因为这允许非常复杂的表达式,我认为你可能无论如何都需要:
preg_match($serial, '/^[D1BEX7]/')
请参阅http://regular-expressions.info.
我个人也会为此使用正则表达式,因为它相对简洁:
preg_match("/^[D1BEX7]/", $serial)
但是,如果您想使用低级字符串函数,strcspn
提供了一个合适的替代方案:
!strcspn($serial, "D1BEX7")
它返回一个正数,除非您的输入字符串以给定的符号之一开头。这就是为什么简单的!
否定就足以作为检查注意事项:此处的输入字符串不应为空。
我想这就是您想要做的:
<?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;
希望这个片段能帮助。。。