【问题标题】:PHP Pick random array values based on totalPHP 根据总数选择随机数组值
【发布时间】:2015-01-02 12:09:20
【问题描述】:

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

【问题讨论】:

  • shufflearray_slice。请展示您尝试过的内容,并解释您遇到的具体问题。 (您的输入数组的元素少于 20 个,那么您希望如何获得 20 个唯一的元素?)
  • 我没有选择 20 个元素。我正在选择 20 的数组值。
  • 显示您的挑选标准示例。 “数组值为 20”没有任何意义。
  • @mario 请检查问题。我更新了代码 sn-p
  • 我会在这里使用稍微不同的方法:1)在一个单独的数组中收集总计 20 个键的所有组合; 2) 从该数组中随机选择一个元素。

标签: php arrays random


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:
    if(count($randomarray)) > 20
       print_r(array_rand($randomarray, 20));
    

    【讨论】:

      【解决方案3】:

      从中获得一些想法:

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

          $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
      )
      

      以及从关联数组中获取随机值的示例;

      <?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
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-17
        • 1970-01-01
        • 1970-01-01
        • 2020-10-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多