【问题标题】:Easiest way to get an array of random values from another array in PHP从 PHP 中的另一个数组获取随机值数组的最简单方法
【发布时间】:2016-04-25 21:54:36
【问题描述】:

我想知道在 PHP 中从数组中获取随机值数组的最简单/最干净的方法是什么。获取随机键数组很容易,但似乎没有立即获取值数组的功能

我发现的最简单的方法是:

$tokens = ['foo', 'bar', '...'];
$randomValues = array_map(function($k) use ($tokens) {
    return $tokens[$k];
}, array_rand($tokens, rand(7, 20)))

这会从 $tokens 变量中返回 7-20 个随机值。然而,这看起来很丑陋,乍一看并不清楚它的作用。

【问题讨论】:

  • 由于您的代码实际上正在运行,这看起来像 prime candidatemovecodereview.stackexchange.com
  • shuffle 然后 array_slice 得到你想要的值的数量
  • 确定你没有得到重复的值吗?我会检查新数组中是否已经存在该值。

标签: php arrays random


【解决方案1】:

如果您不想修改 $tokens 数组,可以翻转随机生成的数组键,然后使用 array_intersect_key。我认为它比array_map 方法更具可读性,但我认为这是相当主观的。

$randomKeys = array_flip(array_rand($tokens, rand(7, 20)));
$randomValues = array_intersect_key($tokens, $randomKeys);

如果你不关心$tokens是否被修改,那么shuffle\slice方法看起来很简单。

【讨论】:

    【解决方案2】:

    只需洗牌,然后切片随机数量的元素:

    shuffle($tokens);
    $result = array_slice($tokens, 0, rand(7, 20));
    

    如果您不想修改数组,那么显然只需分配另一个变量并使用它:

    $temp = $tokens;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      相关资源
      最近更新 更多