【问题标题】:checking a var for matches against an array检查 var 是否与数组匹配
【发布时间】:2012-07-24 18:28:36
【问题描述】:

首先我知道这是一个重复的问题,在这里经常被问到,但是我仔细阅读了这些答案,但仍然无法弄清楚我的代码有什么问题。我对 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 提供什么,验证检查都会回显失败声明。这是非常简单的代码,所以我确信它非常明显,但我想我只需要另一双眼睛快速浏览一下。 :)

感谢您的帮助!

【问题讨论】:

    标签: php arrays validation


    【解决方案1】:

    if ( $validProgram = 1 ) 分配1$validProgram。这个赋值返回1,所以语句总是通过。

    尝试if ( $validProgram == 1 ) 测试是否相等。

    不管怎样,看看整个块,看起来你将其中的很多压缩到一个 in_array 检查,完全删除了 foreach 循环和 $validProgram 变量:

    $selectedProgram = prepString( $selectedProgram );
    
    if(in_array($selectedProgram, $validProgramCodes))
    {
        echo "success!";
    }
    else
    {
        echo "failure!";
    }
    

    【讨论】:

    • 哇,现在我觉得自己很愚蠢!我知道这有点小……我只是假设我用过 == 并且我的眼睛甚至没有检查。谢谢!但是,现在一切都输出为无效...嗯
    • @TomC:与其调试检查数组成员关系的大块,也许使用 PHP 的内置函数可以解决您的问题。否则,我建议在检查它是否在数组中之前运行var_dump($selectedProgram),以确保变量实际上包含您所期望的。
    • 嗨 Matchu,由于某种原因,var_dump 声称我在数组中只有 6 个条目,而实际上有 12 个......奇怪!请原谅我的无知,但是您所指的内置PHP函数是什么?
    • @TomC:编辑答案指向 PHP 的内置 in_array 函数,该函数检查给定元素是否出现在给定数组中的任何位置。
    • 太棒了!我不知道 in_array,非常方便。我会用那个。 :) 但是,无论我的选择如何,它仍然在呼应“失败”?有任何想法吗? (非常感谢您的帮助!学到了很多东西。)编辑没关系!问题出在我的 prepString 函数上。多哈。感谢您的帮助:)
    【解决方案2】:

    你有:

    if ( $validProgram = 1 ) 
    

    应该是:

    if ( $validProgram == 1 ) 
    

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

    【讨论】:

      【解决方案3】:

      还有一种使用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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多