Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 将字符串作为字符数组处理是否返回一个";“未初始化字符串偏移量”;注意?_Php_Error Handling - Fatal编程技术网

Php 将字符串作为字符数组处理是否返回一个";“未初始化字符串偏移量”;注意?

Php 将字符串作为字符数组处理是否返回一个";“未初始化字符串偏移量”;注意?,php,error-handling,Php,Error Handling,我收到以下通知 注意:第17行/script.php中的未初始化字符串偏移量:1 这里是第16行和第17行 $results = exec('ping -c 1 -w 1 ' . $ip, $output); $servers[] = ($results[1] === '' ? false : true); 这是因为我使用$results[1]获取$results的第二个字符造成的吗?如果是这样的话,在互联网上阅读时,建议将$string[]置于substr()之上,那么为什么会生成通知呢 我

我收到以下通知

注意:第17行/script.php中的未初始化字符串偏移量:1

这里是第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]
,就像
$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

这意味着返回的字符串少于2个字符。一个字符怎么可能等于空字符串?@Cthulhu如果服务器联机,结果中的第二个字符不是空格。如果它处于脱机状态,则会有一个空间。我想我应该检查$results是否是空字符串,而不是第二个字符?如果该位置不存在字符,
$string[]
将返回一个错误,而
substr()
将返回false?@cantsay在您的代码示例中,有一个空字符串的比较,不是空格,但无论如何我知道了。啊,是的,您是对的。我一定是决定用这种方式检查它是否是字符串,但忽略了数组是零基的这一事实。感谢您的解释,但它应该是
$servers[]=($results?true:false)(颠倒为假和真)?取决于逻辑。我刚才看到了你的评论并添加了第二个字符的测试。我认为这是
@$result[1]==''
非常合适的情况。