【问题标题】:Select multiple random values by key from arrays从数组中按键选择多个随机值
【发布时间】:2018-06-13 13:45:25
【问题描述】:

我想从数组中选择 5 个随机 ID。这是我的数组$test

Array
(
    [id] => 13
    [pets] => 8
)
Array
(
    [id] => 15
    [pets] => 8
)
Array
(
    [id] => 16
    [pets] => 10
)
Array
(
    [id] => 17
    [pets] => 9
)
Array
(
    [id] => 18
    [pets] => 10
)
Array
(
    [id] => 19
    [pets] => 10
)
Array
(
    [id] => 20
    [pets] => 0
)
Array
(
    [id] => 21
    [pets] => 8
)
Array
(
    [id] => 22
    [pets] => 9
)
Array
(
    [id] => 23
    [pets] => 4
)
Array
(
    [id] => 24
    [pets] => 0
)
Array
(
    [id] => 40
    [pets] => 8
)
Array
(
    [id] => 43
    [pets] => 2
)

如何从数组中选择 5 个随机 ID 并将它们放入这样的字符串中:

$ids = '13,17,18,21,43';

我尝试使用array_rand,但它似乎不适用于我的数组类型。我不确定是否有任何其他内置的 PHP 函数可以完成这种类型的工作,或者我是否必须创建自己的函数,如果有我自己的函数来插入数字,那就太好了。谢谢

【问题讨论】:

    标签: php arrays multidimensional-array random


    【解决方案1】:

    首先提取id列索引也由id,然后随机选择5个,最后内爆成一个逗号分隔的列表。由于键必须是唯一的,因此如果数组中有重复项,则不会返回重复的 ids 的额外好处:

    $ids = implode(',', array_rand(array_column($test, 'id', 'id'), 5));
    

    对于函数:

    function array_rand_multi($array, $key, $num) {
        return implode(',', array_rand(array_column($array, $key, $key), $num));
    }
    

    【讨论】:

    • array_rand 返回键
    • 您确定在array_slice 中不需要0,5php.net/manual/en/function.array-slice.php
    • @splash58 是的,我忘了在id 上建立索引。
    • @Andreas:我没有使用array_slice,只是忘记了array_column中的参数。
    • 啊。对不起,不知道我怎么能读到。我可以把它归咎于疲倦和轻微流感吗? :-)
    【解决方案2】:

    您可以使用 array_column 仅获取 ID 并将它们随机播放。
    然后使用 array_slice 得到五个项目并 implode。

    $id = array_column($arr, "id");
    Shuffle($id);
    Echo implode(",", array_slice($id, 0, 5));
    

    【讨论】:

      【解决方案3】:

      你可以像这样继续(简短的例子):

          <?php
              $items = array(
        array("id" => 43, "pets" =>2),
        array("id" => 40, "pets" =>8),
        array("id" => 24, "pets" =>0),
        array("id" => 23, "pets" =>4),
        );
      
             $ids = $items[array_rand($items)]["id"].",".$items[array_rand($items)]["id"].",".$items[array_rand($items)]["id"];
      echo $ids;
              // Output Example : 24, 40, 23
          ?>
      

      它将从主数组($items)中选择一个随机键,例如:3,并输出“id”:

      $items[3]["id"]
      

      对于这个例子。

      这是一个演示:http://sandbox.onlinephpfunctions.com/code/32787091e341cdf8e172d96b065b14b3ca834846

      【讨论】:

      • 这有一个缺陷,因为你必须使用 array_rand 五次,这意味着可能有重复。 3v4l.org/lT0Q2
      • @Andreas 在最初的问题中没有提到。你确定需要吗?
      • 你是对的,它没有说有问题,但它确实说“5 个随机 ID”,并且示例显示没有重复。但是你是正确的,它没有被列为要求。我没有对你投反对票。
      猜你喜欢
      • 1970-01-01
      • 2016-11-12
      • 2019-07-30
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多