尽管 array_key_exists() 检查未定义的偏移量
Undefined offset despite array_key_exists() check
当在函数中使用下面的代码时($floor
& $lift
被传入但我在这里添加它们用于演示)我得到一个 Notice: Undefined offset: 20
最后 return
个语句。
最后一个 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;
}
end
return 是数组中的最后一个 值 ,所以
$moving["lift"][ end( $moving["lift"] ) ]
和
$moving["no_lift"][ end( $moving["no_lift"] ) ]
两者实际上都是
$moving["no_lift"][ 20 ]
如果您打算在数组中查找某些内容,并且 return 如果未找到最后一项,则可以使用 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']);
}
如果数组中的某些值可能是 null
,您可以使用 array_key_exists
而不是 isset
。 (您可以查看答案 here 以获得更多相关描述。)
end
不是 return 最后一个 key,而是数组的最后一个 value。所以该行应该是:
return ( array_key_exists( $floor, $moving["no_lift"] ) ? $moving["no_lift"][ $floor ] : end( $moving["no_lift"] );
(但是这仍然假定 $moving['no_lift']
是一个数组。)
当在函数中使用下面的代码时($floor
& $lift
被传入但我在这里添加它们用于演示)我得到一个 Notice: Undefined offset: 20
最后 return
个语句。
最后一个 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;
}
end
return 是数组中的最后一个 值 ,所以
$moving["lift"][ end( $moving["lift"] ) ]
和
$moving["no_lift"][ end( $moving["no_lift"] ) ]
两者实际上都是
$moving["no_lift"][ 20 ]
如果您打算在数组中查找某些内容,并且 return 如果未找到最后一项,则可以使用 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']);
}
如果数组中的某些值可能是 null
,您可以使用 array_key_exists
而不是 isset
。 (您可以查看答案 here 以获得更多相关描述。)
end
不是 return 最后一个 key,而是数组的最后一个 value。所以该行应该是:
return ( array_key_exists( $floor, $moving["no_lift"] ) ? $moving["no_lift"][ $floor ] : end( $moving["no_lift"] );
(但是这仍然假定 $moving['no_lift']
是一个数组。)