2016-11-22 9 views
0

を確認してください)(array_key_existsにもかかわらず、オフセット、私は最後のreturn文でNotice: Undefined offset: 20を取得しています($floor & $liftが渡されているが、私はデモのためにここではそれらを追加しました)。未定義関数に以下のコードを使用している場合

最後の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 ] 
、有効に、なり、アレイから最後 を返しますあなたは、配列の中で何かを探して、それが見つからない場合は、最後の項目を返すために意図されている場合は、

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あなたの場合は値を探しているなら

、あなたはin_arrayを使用することができますキーを探しています。配列の値のいくつかはnullであってもよい場合

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使用することができます。 (あなたはそのことについての説明をもう少しのための答えhereを確認することができます。)

+0

ありがとう - 明らかに私の一部のドキュメントの誤解。 –

1

endは最後キーを返しますが、配列の最後のしません。だから、行は次のようになります。

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

(。しかし、まだ$moving['no_lift']が配列であることを前提としている)

+0

ありがとう - 明らかに私の一部のドキュメントの誤解。 –

関連する問題