我正在调试我的php error_logs以查找我错过的通知,警告和错误。现在我使用php array_rand()
函数来获取数组的1个元素。在正常情况下,这可以正常工作,但在我的php错误日志中,有一些关于使用array_rand()
的代码的警告。
PHP警告:array_rand():第二个参数必须介于1和之间 数组中元素的数量......
我正在使用array_rand():
$arr =
[
3 => [
999 => "10-G2",
1366 => "11-B2",
1481 => "14-C3",
]
];
$randomLoc = array_rand($arr[3], 1);
这将返回999
,1366
或1481
。如果此数组为空,
如果$arr[3]
是emtpy,则会抛出空警告
警告:array_rand():
中的数组为空
如果未设置$arr[3]
,则会在警告
注意:未定义的偏移量:
中的3
那么,如果没有未定义的偏移通知,怎么可能得到第二个参数必须介于1和... 之间?
答案 0 :(得分:2)
很可能是因为您的数组不包含您认为包含的内容。例如,这个数组会给你这个错误:
$arr =
[
3 => []
];
$randomLoc = array_rand($arr[3], 1);
此外,如果我可以提出更一般的建议,您不必查看日志文件来查找这些内容。在您的开发环境中,您的系统应该主动告诉您某些内容是否已损坏。就我而言,脚本执行会停止并在屏幕上显示一条带有错误消息的回溯,用于任何错误:致命,未捕获的异常,错误和通知。
修改强>
你说:
如果$ arr [3]为emtpy,则会抛出空警告
事实并非如此。它可能取决于版本:我对array_rand不是很熟悉。我自己的测试表明:
$arr = [];
$val = array_rand( $arr );
以$val
设置为null结束。这样:
$arr = [];
$val = array_rand( $arr, 1 );
将准确触发您收到的错误:
PHP警告:array_rand():第二个参数必须介于1和之间 数组中元素的数量......
在任何情况下,我都不会收到有关空数组的错误。我使用的是PHP 7.0。
答案 1 :(得分:0)
$randomLoc = isset($arr[3]) && !empty($arr[3]) ? array_rand($arr[3], 1) : null
如果$ arr未设置或为空,将返回null
值。
另外,您不必在日志文件中使用grep来查找这些错误。您的开发环境应该显示通知&警告。以下是有关错误报告的更多信息:http://php.net/manual/fr/function.error-reporting.php
答案 2 :(得分:0)
那么,如果没有未定义的偏移通知,怎么可能得到第二个参数必须介于1和...之间?
不是,但没关系,因为你也不想要那个警告。在将数组传递给array_rand()之前,请检查您是否有一个有效的数组:
if (
is_array($arr) &&
array_key_exists(3, $arr) &&
is_array($arr[3]) &&
!empty($arr[3])
) {
$randomLoc = array_rand($arr[3]);
} else {
$randomLoc = null; // or throw an error?
}
如果您使用的是PHP7 +,则可以使用新的??
运算符一次执行相同操作:
$randomLoc = array_rand($arr[3] ?? [null]);