我在第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;
}
}
答案 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;
}
}