将字符串作为字符数组处理是否返回“0”;未初始化的字符串偏移量“;注意


Does treating a string as a character array return an "Uninitialized string offset" notice?

我收到以下通知

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]获取$results的第二个字符引起的吗?如果是这样的话,在互联网上阅读,似乎推荐$string[]而不是substr(),那么为什么它会产生通知呢?

我的脚本依赖于这个文件来生成JSON,所以一个通知打断了它(这是一个问题,因为它是一个开源脚本)

exec返回一个字符串。要访问字符串中的每个字符,可以使用数组表示法$string[x],类似于从0开始的$string[1]。但是,如果有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