PHP根据总计选择随机数组值

时间:2015-01-02 12:09:21

标签: php arrays random

我在php中有数组

$randomarray = array('1106'=>'5','1110'=>'2','11867'=>'3','1206'=>'2','1210'=>'1','1223'=>'6','1235'=>'3','12565'=>'4','1258'=>'5','12690'=>'2','12693'=>'3','1283'=>'1','12944'=>'5');

我想从数组中随机选取数量为20的元素。每个元素只有一次

我尝试了一些数组随机的例子。我无法得到我期望的确切总数。

这是我做的那个例子。但循环变为不定式,

function randomTo($numIn) {
    global $randomarray;
    $numOut = 0;
    $numbers = array();

    do {
        $key = array_rand($randomarray );
        $add =  $mainarray[$key];
        if($numOut + $add > $numIn)
            continue;
        $numOut += $add;
        $numbers[] = $add;
        unset($mainarray[$key]);
    } while( $numOut != $numIn );

    return $numbers;
}
$testdata = randomTo(20);

3 个答案:

答案 0 :(得分:0)

您尝试解决的问题称为Subset sum,它是Knapsack problem的子集。

只需google for it,当你正在使用它时,请谷歌Dynamic programming,因为这是解决问题的方法。

答案 1 :(得分:-1)

if(count($randomarray)) > 20
   print_r(array_rand($randomarray, 20));

答案 2 :(得分:-1)

从中得到一些想法:

从数组中获取随机值的示例       

    $r = array();
    for ($i = 0; $i < $num; $i++) {
        $r[] = $arr[$i];
    }
    return $num == 1 ? $r[0] : $r;
}

$a = array("apple", "banana", "cherry");
print_r(array_random($a));
print_r(array_random($a, 2));
?>

cherry
Array
(
    [0] => banana
    [1] => apple
)

从assoc数组中获取随机值的示例;

<?php
function array_random_assoc($arr, $num = 1) {
    $keys = array_keys($arr);
    shuffle($keys);

    $r = array();
    for ($i = 0; $i < $num; $i++) {
        $r[$keys[$i]] = $arr[$keys[$i]];
    }
    return $r;
}

$a = array("a" => "apple", "b" => "banana", "c" => "cherry");
print_r(array_random_assoc($a));
print_r(array_random_assoc($a, 2));
?>

Array
(
    [c] => cherry
)
Array
(
    [a] => apple
    [b] => banana
)