繁体   English   中英

删除数组的特定值

[英]deleting specific value of array

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

因此,无法通过函数删除未设置的值,但是您将花钱买最简单的函数吗? 好吧,您将找不到更简单的东西。

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

$array=array_diff($array, array($toDelete));

如果找到, 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为:

$rand_key = array_rand($imgArray);
// optional, if you need the value for something:
// $rand_val = $imgArray[$rand_key];
unset($imgArray[$rand_key]);

这就是混淆键和值的原因。 $ imgArray是一个range(1,9 ),但这是值。 您的键是range(0,8)

因此,* $ rand_key *实际上不是随机密钥,而是随机值。

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

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

如果要随机搜索关键字,请使用range(0,8)

尝试这个:

// 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
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM