检查var是否匹配数组

时间:2012-07-24 18:28:37

标签: php arrays validation

首先,我知道这是一个重复的问题,在这里经常被问到,但是我已经仔细研究了这些答案,但仍然无法弄清楚我的代码有什么问题。我对PHP很新,我99%肯定这是一个非常容易/新手的事情,这就是为什么它令我感到沮丧。

以下是代码:

    $validProgram = 0;
$validProgramCodes = array('ITFZ', 'ITFC', 'ITFP', 'ITFE', 'ITFL', 'ITFS',
                           'ITFF', 'ITFM', 'ITFT', 'IEME', 'ISMK', 'IPKT');

if ( isset( $_GET[ 'category' ] ) && isset( $_GET[ 'subcategory' ] )
    && $_GET[ 'category' ] != '' && $_GET[ 'subcategory' ] != '' )
{
    $selectedSchool = $_GET[ 'category' ];
    $selectedProgram = $_GET[ 'subcategory' ];
    $selectedSchool = prepString( $selectedSchool );
    $selectedProgram = prepString( $selectedProgram );

    foreach ( $validProgramCodes as $temp )
    {
        if ( $temp == $selectedProgram )
        {
            $validProgram ++;
        }
    }

    if ( $validProgram == 1 )
    {
        echo "success!";
    }
    else if ( $validProgram !== 1)
    {
        echo "failure!";
    } 
}

}

现在......出于某种原因,无论为$ selectedProgram提供什么,验证检查都会回复失败声明。这是非常简单的代码,所以我确信这是明显的,但我想我只需要另外一双眼睛快速浏览一下。 :)

感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

if ( $validProgram = 1 ) 将值1分配给$validProgram1。此赋值返回if ( $validProgram == 1 ),因此语句始终通过。

尝试foreach来测试是否相等。

无论如何,查看整个块,看起来您将大量此内容压缩为单in_array项检查,完全删除$validProgram循环和$selectedProgram = prepString( $selectedProgram ); if(in_array($selectedProgram, $validProgramCodes)) { echo "success!"; } else { echo "failure!"; } 变量:< / p>

{{1}}

答案 1 :(得分:2)

你有:

if ( $validProgram = 1 ) 

应该是:

if ( $validProgram == 1 ) 

否则,您总是将{1}分配给$validProgram,这将返回TRUE'。

答案 2 :(得分:0)

还有一种方法可以使用RegExp

$codeIsValid = preg_match('/^('.implode('|', $validProgramCodes).')$/i', $programCodeToCheck);

if ($codeIsValid)
  echo 'Valid';
else
  echo 'Not Valid';

注意:可能不区分大小写匹配!

或者像以前建议的那样使用in_array(),但将代码(将与有效代码匹配)引导至一个案例。

$programCodeToCheck = strtoupper($programCodeToCheck); // leading string to the case that validCodes are
$codeIsValid = in_array($selectedProgram, $validProgramCodes); // testing array for possible match