php中通过数组进行高效随机抽取指定条记录的算法

当我们在PHP中需要从一个数组中随机抽取指定条记录时,我们可以使用以下步骤:

当我们在PHP中需要从一个数组中随机抽取指定条记录时,我们可以使用以下步骤:

  1. 创建一个新的数组来存储我们要抽取的记录:

$selectedItems = array();

  1. 使用 PHP 函数 array_rand() 从原始数组中随机选择指定数量的下标。

$randomKeys = array_rand($originalArray, $numberOfItemsToSelect);

其中,$originalArray 是我们要从中随机选择记录的原始数组,而 $numberOfItemsToSelect 是我们想要抽取的记录数量。

  1. 遍历选中的下标,并将对应的值添加到新数组中:

foreach ($randomKeys as $key) {
$selectedItems[] = $originalArray[$key];
}

我们使用了 foreach() 循环,遍历选中的下标 $randomKeys 中的每一个键名,将该键名对应的原始数组中的值添加到 $selectedItems 中。

  1. 返回新数组 $selectedItems

return $selectedItems;

以下是两个示例说明。

示例一

假设我们有一个存储了 10 个元素的数组 $colors,现在我们想要随机抽取其中 5 个元素。我们可以使用上述方法进行操作:

$colors = array('Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet', 'Brown', 'Gray', 'Black');
$numberOfItemsToSelect = 5;

$selectedColors = array();
$randomKeys = array_rand($colors, $numberOfItemsToSelect);

foreach ($randomKeys as $key) {
    $selectedColors[] = $colors[$key];
}

print_r($selectedColors);

以上代码输出结果可能如下:

Array (
    [0] => Orange
    [1] => Green
    [2] => Blue
    [3] => Indigo
    [4] => Gray
)

示例二

假设我们有一个存储了 20 个用户的数组 $users,每个用户都有一个 $user_id 字段。现在我们想要随机抽取其中 3 个用户。我们可以使用上述方法进行操作:

$users = array(
    array('user_id' => 1, 'username' => 'Alice'),
    array('user_id' => 2, 'username' => 'Bob'),
    array('user_id' => 3, 'username' => 'Charlie'),
    array('user_id' => 4, 'username' => 'David'),
    array('user_id' => 5, 'username' => 'Edgar'),
    array('user_id' => 6, 'username' => 'Frank'),
    array('user_id' => 7, 'username' => 'George'),
    array('user_id' => 8, 'username' => 'Henry'),
    array('user_id' => 9, 'username' => 'Isabelle'),
    array('user_id' => 10, 'username' => 'Jack'),
    array('user_id' => 11, 'username' => 'Karen'),
    array('user_id' => 12, 'username' => 'Liam'),
    array('user_id' => 13, 'username' => 'Mia'),
    array('user_id' => 14, 'username' => 'Nadia'),
    array('user_id' => 15, 'username' => 'Oliver'),
    array('user_id' => 16, 'username' => 'Penny'),
    array('user_id' => 17, 'username' => 'Quincy'),
    array('user_id' => 18, 'username' => 'Rachel'),
    array('user_id' => 19, 'username' => 'Steve'),
    array('user_id' => 20, 'username' => 'Tracy'),    
);

$numberOfItemsToSelect = 3;
$selectedUsers = array();
$randomKeys = array_rand($users, $numberOfItemsToSelect);

foreach ($randomKeys as $key) {
    $selectedUsers[] = $users[$key];
}

print_r($selectedUsers);

以上代码输出结果可能如下:

Array (
    [0] => Array
        (
            [user_id] => 4
            [username] => David
        )

    [1] => Array
        (
            [user_id] => 14
            [username] => Nadia
        )

    [2] => Array
        (
            [user_id] => 15
            [username] => Oliver
        )

)

本文标题为:php中通过数组进行高效随机抽取指定条记录的算法

基础教程推荐