2017-08-03 19 views
0

我有non-numeric value encountered错误的问题在此功能 和我$phone的价值是123243743SUBSTR后,我得到了非数值错误

private function _validatePhone($phone){ 
    $subhp=""; 
    if(substr($phone,0,3) =="+62"){ 
     $subhp += substr($phone, 3,strlen($phone)-1); 
    }elseif(substr($phone,0,2)=="62"){ 
     $subhp += substr($phone, 2,strlen($phone)-1); 
    }else{ 
     $subhp += substr($phone, 1,strlen($phone)-1); 
    } 
    var_dump($subhp);die(); 
    $nohp = "0".$subhp; 
    log_message("info","validate phone to be ".$nohp); 
    return $nohp; 
} 

我substr'ed的$phone,非数值错误后正在显现。我已经在寻找解决方案了几天,但我找不到解决方案。

+3

为什么使用'+ ='将子串结果“添加”为空字符串.....'+'是数字加法; '。='用于字符串连接将更适合于字符串....不要将电话号码视为数字;他们不是,他们是字符串 –

+0

这是正确的......串联运算符是点,而不是加 –

+0

是的,我很抱歉,我仍然是业余的PHP,谢谢你的解决方案@MarkBaker – rinaldy31

回答

1

也许你做了太多的JavaScript。

InPHP,字符串连接运算符是.,不+,所以为了追加到另一个字符串,则必须使用.=,而不是+=

而且,由于所有这些串连发生在一个if/elseif/else结构和您的字符串是之前空的,你并不需要在所有的串联,一个很好的旧分配将我足够:

private function _validatePhone($phone) { 
    if (substr($phone, 0, 3) == '+62') { 
     $phone_offset = 3; 
    } elseif (substr($phone, 0, 2) == "62") { 
     $phone_offset = 2; 
    } else { 
     $phone_offset = 1; 
    } 
    $subhp = substr($phone, $phone_offset, strlen($phone) - 1); 
    var_dump($subhp);die(); 
    $nohp = "0$subhp"; 
    log_message('info', "validate phone to be $nohp"); 
    return $nohp; 
} 

我也冒昧地对标准化您的代码,以便它更容易阅读和维护。你应该知道,双引号需要更多的时间(如果我没有错误是7次)比简单引号处理更多的时间,因为PHP会查找它们之间的变量,所以我用双引号替换它们,除非有变量放在一起到字符串。

我还从if/elseif/else结构中提取了$subhp的指定,以便更新该行更易于管理。

+0

真的非常感谢您的解决方案先生,并将其冻结!真的很感谢 – rinaldy31

相关问题