Ao usar o código abaixo em uma função ($floor
E $lift
são passados, mas eu os adicionei aqui para demonstração) estou recebendo um Notice: Undefined offset: 20
no último return
declaração.
O último return
é o meio que deve ser usado neste exemplo, mas por que estou recebendo o Notice: Undefined offset: 20
? Se não me engano (o que claramente sou), o array_key_exists()
função deve estar impedindo isso? Eu também tentei com isset()
sem sucesso.
$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;
}
Respostas:
2 para resposta № 1end
retorna o último valor de uma matriz, então
$moving["lift"][ end( $moving["lift"] ) ]
e
$moving["no_lift"][ end( $moving["no_lift"] ) ]
ambos serão, com efeito,
$moving["no_lift"][ 20 ]
Se você pretende procurar algo na matriz e retornar o último item se ele não for encontrado, você pode usar in_array
se você está procurando um valor
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"]);
}
ou isset
se você estiver procurando por uma chave.
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"]);
}
Você pode usar array_key_exists
ao invés de isset
se alguns dos valores na matriz puderem ser null
. (Você pode verificar as respostas Aqui para um pouco mais de uma descrição sobre isso.)
1 para resposta № 2
end
não retorna o último chave, mas o último valor de uma matriz. Portanto, a linha deve ler:
return ( array_key_exists( $floor, $moving["no_lift"] ) ? $moving["no_lift"][ $floor ] : end( $moving["no_lift"] );
(No entanto, isso ainda pressupõe que $moving["no_lift"]
é uma matriz.)