1

我有一个包含数字 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)?

4

4 回答 4

7

因此,无法按功能删除未设置的值,但是您为最简单的功能付出了代价?好吧,你不会发现任何更简单的东西。

$array=array(312, 401, 1599, 3);
$toDelete=401;

$array=array_diff($array, array($toDelete));
于 2013-05-23T08:06:16.577 回答
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]);
于 2013-05-23T08:03:10.103 回答
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
)
于 2013-05-23T08:24:11.873 回答
0

您混淆了键和值,这就是原因。$imgArray是 a range(1,9) 但这是价值观。你的钥匙是range(0,8).

所以 *$rand_key* 实际上不是随机键而是随机值。

因此,您删除了错误的... 键,您将暴露于 OutOfBounds 异常。

如果要随机化搜索值,请使用array_search检索和处理键

如果要随机化搜索到的键,请使用range(0,8)

于 2013-05-23T08:07:11.230 回答