2012-07-24 61 views
0

首先我知道这是一个重复的问题,在这里经常被问到,但是我已经仔细阅读了这些答案,仍然无法弄清楚我的代码出了什么问题。我对PHP相当陌生,99%肯定这是一个非常简单/新手的事情,这就是为什么它让我感到沮丧。检查var对数组的匹配

下面是代码:

$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,验证检查回声出failurestatement提供。这是非常简单的代码,所以我相信这是一个非常明显的问题,但我认为我需要另一双眼睛快速浏览一下。 :)

谢谢你的帮助!

回答

6

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!"; 
} 
+0

哇,现在我觉得很蠢!我知道这是一件小事......我只是假设我已经使用了==,而我的眼睛甚至没有检查。谢谢!然而,现在一切输出无效......嗯 – Prefix 2012-07-24 18:32:49

+1

@TomC:而不是调试你检查数组成员的大块,也许使用PHP的内置函数将解决你的问题。否则,我建议在检查它是否在数组中之前运行'var_dump($ selectedProgram)',以确保变量实际上包含您期望的内容。 – Matchu 2012-07-24 18:36:31

+0

嗨Matchu,由于某种原因var_dump声称我只有6个条目在数组中,实际上有12个......奇怪!请原谅我的无知,但您提到的内置PHP函数是什么? – Prefix 2012-07-24 18:41:12

2

您有:

if ($validProgram = 1) 

它应该是:

if ($validProgram == 1) 

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

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