首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP根据总数随机选取数组值

PHP根据总数随机选取数组值
EN

Stack Overflow用户
提问于 2015-01-02 20:09:21
回答 3查看 164关注 0票数 0

我在php中有数组,像这样

代码语言:javascript
运行
复制
$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的元素。每个元素只需要一次

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

这是我所做的例子。但是循环变成了不定式,

代码语言:javascript
运行
复制
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);
EN

回答 3

Stack Overflow用户

发布于 2015-01-02 20:49:58

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

只要在谷歌上搜索它,当你在做它的时候,谷歌搜索Dynamic programming,因为这是解决问题的一种方式。

票数 0
EN

Stack Overflow用户

发布于 2015-01-02 20:31:08

代码语言:javascript
运行
复制
if(count($randomarray)) > 20
   print_r(array_rand($randomarray, 20));
票数 -1
EN

Stack Overflow用户

发布于 2015-01-02 20:36:28

从这里得到一些想法:

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

代码语言:javascript
运行
复制
    $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数组中获取随机值的和示例;

代码语言:javascript
运行
复制
<?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
)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27741992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档