2013-06-30 61 views
2

這是我的腳本的一部分:如何避免未定義的偏移錯誤?

$one = 0; 
$two = 0; 
$three = 0; 

$data = 'a-b-c'; 

$data = explode("-", $data); 
$one = $data[0]; 
$two = $data[1]; 
$three = $data[2]; 

沒有問題,但迄今爲止$數據有時會

$data = 'a-b-c'; 

有時

$data = 'a-b'; 

$data = 'a-b'情況;我得到未定義的抵消:3錯誤。是以某種方式如何避免這個錯誤?

+3

這是一個設計問題 - 你的代碼會變得凌亂和充滿條件;只依賴數組索引。 – moonwave99

回答

10

包裹分配到if - 阻塞:

if(isset($data[0])) { 
    $one = $data[0]; 
} 

...

這就是現在檢查,如果這個數組項isset,如果不是你就是不給它分配並沒有錯誤將顯示。

+0

似乎有一個缺失的括號。我建議'if(isset($ data [0])){' – showdev

+0

是的,你是對的。修復。謝謝! – DaGardner

5

假設至少有一個會一直存在

$data = 'a-b'; 

list($one, $two, $three) = explode("-", $data . '-0-0'); 
+0

+1好用 - 避免使用isset,所以代碼更快! –

0

您需要使用isset。 Isset檢查變量是否存在。

// You can get rid of this since we set the default later if isset fail 
/* 
$one = 0; 
$two = 0; 
$three = 0; 
*/ 

$data = 'a-b-c'; 

$data = explode('-', $data); 
$one = (isset($data[0]) === TRUE ? $data[0] : 0); 
$two = (isset($data[1]) === TRUE ? $data[1] : 0); 
$three = (isset($data[2]) === TRUE ? $data[2] : 0); 
0

使用issetisset($data[0] == true)

+0

似乎有一個錯位的括號。我建議'isset($ data [n])== true'。另外,你通常可以通過執行'isset($ data [n])'來評估真實性。 – showdev

0

我經常這樣做:

$a = array(1,2,3,4); 
$current = 0; 
$index = 0; 
while(isset($a[$index])) { 
    $current = $a[$index]; 
    //... do something ... 
    $index++; 
} 

這工作!