未定义的偏移量1和2

时间:2016-09-17 08:49:32

标签: php

我在第32行和第33行有未定义的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;
        }
    }

2 个答案:

答案 0 :(得分: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;
        }
    }

答案 1 :(得分:0)

问题是您尝试访问$splittedGSM的元素1和2而不先检查它们是否存在。您可能正在使用空字符串作为参数调用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;
  }
}