2016-09-17 119 views
-2

我在第32行和第33行有未定义的1和2.我甚至都不知道发生了什么以及错误的含义。我该如何解决这个问题?未定义偏移量1和2

$splittedGSM = str_split($gsm); 
    $correctGSM = TRUE; 

    if(count($splittedGSM) != 11) $correctGSM = FALSE; 
    if($splittedGSM[0] != 0) $correctGSM = FALSE; 
    if($splittedGSM[1] != 7 && $splittedGSM[1] != 8 && $splittedGSM[1] != 9) $correctGSM = FALSE; //Line 32 
    if($splittedGSM[2] != 0 && $splittedGSM[2] != 1) $correctGSM = FALSE; //Line 33 
    foreach ($splittedGSM as $realgsm) { 
     if(!is_numeric($realgsm)){ 
      return FALSE; 
     } 
    } 
+1

哪一个是线32和33在这个代码中? – Bhavin

+0

如果($ splittedGSM [1]!= 7 && $ splittedGSM [1]!= 8 && $ splittedGSM [1]!= 9)$ correctGSM = FALSE,代码 存在。 //行32 if($ splittedGSM [2]!= 0 && $ splittedGSM [2]!= 1)$ correctGSM = FALSE; //行33 –

+0

必须尝试if(!isset($ splittedGSM [1])){$ splittedGSM [1] = null}条件? – Bhavin

回答

0

试试以下代码。偏移没有被定义,因为它没有被设置,你必须检查它是否没有被设置,那么偏移将是空的。你必须使用isset()函数。

$splittedGSM = str_split($gsm); 
    $correctGSM = TRUE; 

    // check using isset function 
    if(!isset($splittedGSM[1])) 
    { 
      $splittedGSM[1] = null; 
    } 
    if(!isset($splittedGSM[2])) 
    { 
      $splittedGSM[2] = null; 
    } 
    if(count($splittedGSM) != 11) $correctGSM = FALSE; 
    if($splittedGSM[0] != 0) $correctGSM = FALSE; 
    if($splittedGSM[1] != 7 && $splittedGSM[1] != 8 && $splittedGSM[1] != 9) $correctGSM = FALSE; //Line 32 
    if($splittedGSM[2] != 0 && $splittedGSM[2] != 1) $correctGSM = FALSE; //Line 33 
    foreach ($splittedGSM as $realgsm) { 
     if(!is_numeric($realgsm)){ 
      return FALSE; 
     } 
    } 
0

的问题是,您尝试访问元素1和2 $splittedGSM没有先检查它们的存在。您可能会调用str_split,并将空字符串作为参数,在这种情况下,将返回包含空字符串的单元素数组。这就解释了为什么访问$splittedGSM[0]时不会出错。
当你需要一个有效的结果,以包含11个元素,则可以通过仅当长度测试满足访问数组元素解决该问题,使用的elseif代替if

$splittedGSM = str_split($gsm); 
$correctGSM = TRUE; 

if(!is_array($splittedGSM) || count($splittedGSM) != 11){ 
    $correctGSM = FALSE; 
}elseif($splittedGSM[0] != 0){ 
    $correctGSM = FALSE; 
}elseif($splittedGSM[1] != 7 && $splittedGSM[1] != 8 && $splittedGSM[1] != 9){ 
    $correctGSM = FALSE; 
}elseif($splittedGSM[2] != 0 && $splittedGSM[2] != 1){ 
    $correctGSM = FALSE; 
} 
foreach ($splittedGSM as $realgsm) { 
    if(!is_numeric($realgsm)){ 
    return FALSE; 
    } 
}