我在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);
答案 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
)