【发布时间】:2011-09-22 05:21:04
【问题描述】:
我想从数组中选择一个随机值,但要尽可能保持唯一。
例如,如果我从 4 个元素的数组中选择一个值 4 次,则选择的值应该是随机的,但每次都不同。
如果我从同一个 4 个元素的数组中选择它 10 次,那么显然有些值会重复。
我现在有这个,但我仍然得到重复的值,即使循环运行了 4 次:
$arr = $arr_history = ('abc', 'def', 'xyz', 'qqq');
for($i = 1; $i < 5; $i++){
if(empty($arr_history)) $arr_history = $arr;
$selected = $arr_history[array_rand($arr_history, 1)];
unset($arr_history[$selected]);
// do something with $selected here...
}
【问题讨论】:
-
为什么不使用
array_rand($arr_history, 4)来随机获取数组呢?这可确保您有 4 个唯一值。在下一次迭代中,您会以不同的顺序获得数组。 -
语句
unset($arr_history[$selected]);似乎将$arr_history视为关联数组,因为$selected是值,而不是索引。不过,这并不能解决问题。取消设置$selected应该将其从数组中删除,这意味着当循环完成时,数组是空的。那是你的意图吗? (我不这么认为)