删除数组的特定值

时间:2013-05-23 08:00:12

标签: php arrays random

我有一个包含数字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 个答案:

答案 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
)