foreach() 与 PHP\array_rand(x, y) 的奇怪行为
Weird behavior with foreach() with PHP\array_rand(x, y)
我试图通过从 n 项的向量中选择 k 项来随机将属性分配给实体。在 运行 下面的代码片段中,有时有效,有时它会在 foreach
中给出这个奇怪的错误
InvalidForeachArgumentException: Invalid argument supplied for foreach()
我确实读过一些关于当通过引用传递变量并且可能需要取消设置时 foreach 的奇怪行为的帖子,但这似乎与此无关,因为我在这里没有使用任何引用。有趣的是,如果我不使用随机数生成器生成 $factor 而是将其设置为常量整数值,代码就可以正常工作。我不太确定,这里发生了什么。
$factor = PseudoRandom\int(
1,
$num
);
$capabilities = vec[];
$random_keys = PHP\array_rand(
$temp,
$factor,
);
foreach ($random_keys as $key) {
$capabilities = Vec\append(
$capabilities,
$temp[$key],
);
}
When picking only one entry, array_rand()
returns the key for a random entry. Otherwise, an array of keys for the random entries is returned.
https://www.php.net/array_rand
因此,当 $factor
恰好是 1
时,只会返回一个键,您无法使用 foreach
.
对其进行迭代
我试图通过从 n 项的向量中选择 k 项来随机将属性分配给实体。在 运行 下面的代码片段中,有时有效,有时它会在 foreach
中给出这个奇怪的错误InvalidForeachArgumentException: Invalid argument supplied for foreach()
我确实读过一些关于当通过引用传递变量并且可能需要取消设置时 foreach 的奇怪行为的帖子,但这似乎与此无关,因为我在这里没有使用任何引用。有趣的是,如果我不使用随机数生成器生成 $factor 而是将其设置为常量整数值,代码就可以正常工作。我不太确定,这里发生了什么。
$factor = PseudoRandom\int(
1,
$num
);
$capabilities = vec[];
$random_keys = PHP\array_rand(
$temp,
$factor,
);
foreach ($random_keys as $key) {
$capabilities = Vec\append(
$capabilities,
$temp[$key],
);
}
When picking only one entry,
array_rand()
returns the key for a random entry. Otherwise, an array of keys for the random entries is returned.
https://www.php.net/array_rand
因此,当 $factor
恰好是 1
时,只会返回一个键,您无法使用 foreach
.