2014-10-06 72 views
0

我得到通知如下将字符串视为字符数组是否会返回“未初始化的字符串偏移量”通知?

Notice: Uninitialized string offset: 1 in /script.php on line 17

这里是线16和17

$results = exec('ping -c 1 -w 1 ' . $ip, $output); 
$servers[] = ($results[1] === '' ? false : true); 

难道这是由我使用$results[1]得到的结果$第二个字符引起的?如果是这样,在网上阅读,看起来$string[]建议超过substr(),为什么它会生成通知?

我的脚本依赖于该文件生成JSON,这样的通知打破它(这是一个问题,因为它是一个开放源代码的脚本)

+3

这意味着返回的字符串少于2个字符。 – AbraCadaver 2014-10-06 18:58:01

+0

无论如何,一个字符如何等于一个空字符串? – Cthulhu 2014-10-06 19:01:41

+0

@Cthulhu如果服务器在线,结果中的第二个字符不是空格。如果它处于离线状态,则有一个空间。 我想我应该检查$结果是否是一个空字符串,而不是第二个字符呢?如果在那个位置没有字符存在,'$ string []'会返回一个错误,而'substr()'会返回false? – cantsay 2014-10-06 19:03:25

回答

1

exec返回一个字符串。要访问字符串中的每个字符,可以使用数组符号$string[x],如$string[1],从0开始。但是,如果有0或1个字符,则[1]不存在。看来你只是检查字符串,因为你正在检查''。使用下列之一:

$servers[] = $results ? true : false; 
//or 
$servers[] = ($results === '') ? true : false; 

基于您的评论,以检查字符位置和空间:

$servers[] = (isset($results[1]) && $results[1] === ' ') ? false : true; 
//or 
$servers[] = (strpos($results, ' ') === 1) ? false : true; 

我会用strpos

+0

感谢您解释,但它应该是'$ servers [] =($ results?true:false);'(错误和真实颠倒过来)? – cantsay 2014-10-06 19:06:43

+0

取决于逻辑。我刚刚看到您的评论并为第二个字符添加了测试。 – AbraCadaver 2014-10-06 19:07:54

+0

我认为这是'@ $ result [1] ==='''真的很合适的情况。 – Cthulhu 2014-10-06 19:10:13

相关问题