我在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);发布于 2015-01-02 20:49:58
您试图解决的问题称为Subset sum,它是Knapsack problem的一个子集。
只要在谷歌上搜索它,当你在做它的时候,谷歌搜索Dynamic programming,因为这是解决问题的一种方式。
发布于 2015-01-02 20:31:08
if(count($randomarray)) > 20
print_r(array_rand($randomarray, 20));发布于 2015-01-02 20:36:28
从这里得到一些想法:
从数组中获取随机值的示例
$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
)https://stackoverflow.com/questions/27741992
复制相似问题