从PHP数组中删除随机项

3
我需要将这个数组的大小减少到X,因此我想删除X个随机项。以下是我的PHP数组:
Array
(
    [helping] => 3
    [me] => 2
    [stay] => 1
    [organized!] => 1
    [votre] => 4
    [passion,] => 1
    [action,] => 1
    [et] => 2
    [impact!] => 1
    [being] => 4



)

我尝试了array_rand(),但它没有保留键/值。

是的,我试过了,但它没有起作用。 - user2267801
5个回答

3

array_rand() 函数会返回给定数组的一个(或多个)随机键,可以用 unset() 函数删除这些键:

$randomKey = array_rand($array, 1);
unset($array[$randomKey]);

如果我需要删除10个项目怎么办?通过将“1”替换为“10”,它会起作用吗? - user2267801
@user2267801:如果您想一次删除多个键,请参见“Marty McVrys”的答案。(您必须循环遍历返回的随机密钥) - erenon

2

array_rand()返回一个包含原始数组键的数组。

您需要使用foreach循环从原始数组中删除这些键。

像这样:

// Suppose you need to delete 4 items.
$keys = array_rand($array, 4);

// Loop through the generated keys
foreach ($keys as $key) {
    unset($array[$key]);
}

0

如果您需要删除一个未知的项目编号,可以执行以下操作:

$myArr = [
    'helping' => 3,
    'me' => 2,
    'stay' => 1,
    'organized!' => 1,
    'votre' => 4,
    'passion,' => 1,
    'action,' => 1,
    'et' => 2,
    'impact!' => 1,
    'being' => 4,
];
$countToRemove = random_int(1, 2); // can return 1 or 2
$keysToRemove = array_rand($myArr, $countToRemove); // returns an int or array
// create the array to loop
foreach (\is_array($keysToRemove) ? $keysToRemove : [$keysToRemove] as $key) { 
    unset($myArr[$key]);
}
var_dump($myArr); die();

在这种情况下,它将随机地从数组中删除1或2个项目。

0
$foo = Array(
    "helping" => 3,
    "me" => 2,
    "stay" => 1,
    "organized!" => 1,
    "votre" => 4,
    "passion," => 1,
    "action," => 1,
    "et" => 2,
    "impact!" => 1,
    "being" => 4
);

$max = 5; //number of elements you wish to remain

for($i=0;$i<$max;$i++){ //looping through $max iterations, removing an element at random
     $rKey = array_rand($foo, 1);
     unset($foo[$rKey]);
}


die(print_r($foo));

0

使用这个,

$array = array(); // Your array

$max = 3;
$keys = array_rand($array, count($array) - $max);

// Loop through the generated keys
foreach ($keys as $key) {
    unset($array[$key]);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接