我有一个包含数字1到10的数组。 当我选择一个随机数组键时,我想删除这个 下面的代码做了类似的事情,但还不够好。
$imgArray = range(1,9);
$rand_key = array_rand($imgArray);
$imgValue = $imgArray[$rand_key];
unset($imgArray[$imgValue]);
代码从数组中删除一个值,但它删除了错误的值, 回显数组会得到以下结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
随机选择的项目将与数字4相同 但是它会删除数组KEY 4,而不是数组值4 ..
有什么方法可以改变吗?除了改变变量(使用-1)?
答案 0 :(得分:7)
因此,没有办法删除按功能取消设置的值,但是您为最简单的功能付出了诀窍?好吧,你找不到更简单的东西。
$array=array(312, 401, 1599, 3);
$toDelete=401;
$array=array_diff($array, array($toDelete));
答案 1 :(得分:5)
array_search
会返回您搜索的值的键,如果找到它:
$rand_key = array_rand($imgArray);
$imgKey = array_search($imgArray[$rand_key]);
if ($imgKey !== false) {
unset($imgArray[$imgKey]);
}
当然你真的不需要这样做,因为$rand_key
已经是数组中的一个键(array_rand
返回一个键!)所以代码减少了到:
$rand_key = array_rand($imgArray);
// optional, if you need the value for something:
// $rand_val = $imgArray[$rand_key];
unset($imgArray[$rand_key]);
答案 2 :(得分:0)
你让键和值混淆,这就是原因。 $ imgArray 是range(1,9
),但这是值。您的密钥是range(0,8)
。
所以* $ rand_key *实际上不是随机密钥而是随机值。
因此,您删除了错误的...键,并且您暴露于OutOfBounds异常。
如果要随机化搜索的值,请使用array_search检索并处理密钥
如果要随机化搜索到的密钥,请使用 range(0,8)。
答案 3 :(得分:0)
试试这个:
// Create array
$imgArray = range(1,9);
// Get random key from array
$rand_key = array_rand($imgArray);
// Get key value from array
$imgValue = $imgArray[$rand_key];
// Delete value from array
unset($imgArray[array_search($imgValue,$imgArray)]);
Here is your array:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
rand_key: 2
imgValue: 3
After delete imgValue: 3
New Array
(
[0] => 1
[1] => 2
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)