2016-11-22 44 views
0

當一個函數($floor & $lift中通過,但我他們在這裏以供演示),我在最後return聲明得到了Notice: Undefined offset: 20使用下面的代碼。不確定的偏移量()檢查

最後return是這個例子中的意思,但爲什麼我會得到Notice: Undefined offset: 20?如果我沒有弄錯(我清楚地知道)array_key_exists()函數應該防止這種情況發生?我也試過isset()沒有成功。

$floor = 20; 
$lift = false; 

$moving = array(
    "no_lift" => array(
     1 => 0, 
     2 => 13, 
     3 => 17, 
     4 => 20 
    ), 
    "lift" => array(
     1 => 0, 
     2 => 10, 
     3 => 10, 
     4 => 20 
    ) 
); 

switch ($lift) { 
    case true: 
     return (isset($moving["lift"][ $floor ]) ? $moving["lift"][ $floor ] : $moving["lift"][ end($moving["lift"]) ]); 
     break; 
    case false: 
     return (array_key_exists($floor, $moving["no_lift"]) ? $moving["no_lift"][ $floor ] : $moving["no_lift"][ end($moving["no_lift"]) ]); 
     break; 
} 
+1

'端($移動[ 「no_lift」])'將'20'。哪些不存在。 –

+1

您正試圖通過鍵訪問數組,但實際上使用的是這些值! – Stuart

+0

也許你正在嘗試使用array_key_exists來搜索值。你需要使用array_search來代替。 –

回答

2

end從數組返回最後,所以

$moving["lift"][ end($moving["lift"]) ] 

$moving["no_lift"][ end($moving["no_lift"]) ] 

都將是,實際上,

$moving["no_lift"][ 20 ] 

如果你正打算尋找一些數組中,並返回的最後一個項目,如果沒有找到它,你可以使用in_array,如果你正在尋找一個值

if ($lift) { 
    return in_array($floor, $moving['lift']) ? $floor : end($moving['lift']); 
} else { 
    return in_array($floor, $moving['no_lift']) ? $floor : end($moving['no_lift']); 
} 

isset如果您正在尋找一把鑰匙。

if ($lift) { 
    return isset($floor, $moving['lift']) ? $moving['lift'][$floor] : end($moving['lift']); 
} else { 
    return isset($floor, $moving['no_lift']) ? $moving['no_lift'][$floor] : end($moving['no_lift']); 
} 

您可以使用array_key_exists,而不是isset如果某些數組中的值可能是null。 (你可以覈對答案here更多關於該說明的一點。)

+0

非常感謝 - 顯然是我對文檔的誤解。 –

1

end不返回最後關鍵,但最後值數組。因此,行應爲:

return (array_key_exists($floor, $moving["no_lift"]) ? $moving["no_lift"][ $floor ] : end($moving["no_lift"]); 

(但是仍然假定$moving['no_lift']是一個數組)

+0

非常感謝 - 顯然是我對文檔的誤解。 –