2014-10-06 140 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

相關問題