使用PHP

时间:2016-04-29 12:32:21

标签: php

我需要检查字符串是否有多个键。有没有办法让它比下面的代码更简单:

$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');

谢谢!

3 个答案:

答案 0 :(得分:4)

  1. 您可以使用[]表示法访问子字符串。
  2. in_array
  3. 样品:

    $flag = in_array($serial[0], ['D','1','B','E','X','7']);
    

    替代方案,因为这允许非常复杂的表达式,我认为你可能还需要它:

    preg_match($serial, '/^[D1BEX7]/')
    

    请参阅http://regular-expressions.info

答案 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;

希望这段代码有帮助......