我有一个值数组。
array = ["A", "B", "C"];
我想随机选择一个项目,对它做些什么,然后从数组中删除它。回去拿另一件东西,等等。
所以我得到:
$item = "B";
array = ["A","C"];
$item = "C";
array = ["A"];
$item = "A";
array =[];
我知道Ruby有一个array.delete_at()
函数,如果我使用Ruby的话,它会非常好用。有没有类似于普通PHP中的函数?
用shuffle()
随机化,然后从末尾弹出一个,或者用array_shift()
从开头移开,这无关紧要:
shuffle($array); // you only need to do this once
$item = array_pop($array);
与您展示的Ruby类似的是,获取一个随机密钥并使用它来获取值,然后使用它来unset()
该元素:
$item = $array[$key=array_rand($array)];
unset($array[$key]);
有两种可能的答案:
如果您不关心数组中剩余元素的顺序,例如,您无论如何都会选择所有元素:
$array = ["A", "B", "C"];
shuffle($array);
while (!empty($array)) {
$randomElement = array_pop($array);
var_dump($randomElement);
}
如果您不想选择所有元素,只选择少数元素。你可以只删除你选择的元素,其他元素的顺序相同:
$array = ["A", "B", "C"];
while (!empty($array)) {
$randomKey = array_rand($array);
$randomElement = $array[$randomKey];
unset($array[$randomKey]);
var_dump($randomElement);
}