You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何实现用户数组与地点数组的随机匹配?

用户与地点集合的随机匹配实现方案

需求说明

现有两个数据结构:用户数组,以及Illuminate\Support\Collection类型的地点集合,需要将两者进行随机匹配,生成包含user_id和location_id的结构化数组。

原数据结构

地点集合

Illuminate\Support\Collection {#4291 ▼
  #items: array:20 [▼
    0 => {#4312 ▶}
    1 => {#4318 ▶}
    2 => {#4313 ▶}
    3 => {#4315 ▶}
    4 => {#4316 ▶}
    5 => {#4319 ▶}
    6 => {#4320 ▶}
    7 => {#4321 ▶}
    8 => {#4322 ▶}
    9 => {#4323 ▶}
    10 => {#4324 ▶}
    11 => {#4325 ▶}
    12 => {#4326 ▶}
    13 => {#4327 ▶}
    14 => {#4328 ▶}
    15 => {#4329 ▶}
    16 => {#4330 ▶}
    17 => {#4331 ▶}
    18 => {#4332 ▶}
    19 => {#4333 ▼
      +"business_location_id": 46
      +"business_location_name": "Khan El-Moaz"
    }
  ]
}

用户数组

array:2 [▼
  167 => "167"
  199 => "199"
]

实现代码

以下是基于Laravel框架的实现方案,可直接复用:

// 替换为你的实际变量
$locations = /* 你的地点Collection实例 */;
$users = /* 你的用户数组 */;

// 提取所有地点ID并打乱顺序,实现随机化
$shuffledLocationIds = $locations->pluck('business_location_id')->shuffle()->toArray();

$matches = [];
foreach ($users as $userId) {
    // 若地点ID耗尽,重新打乱补充(可选逻辑,按需开启)
    if (empty($shuffledLocationIds)) {
        $shuffledLocationIds = $locations->pluck('business_location_id')->shuffle()->toArray();
    }
    // 生成匹配项,转换为字符串格式
    $matches[] = [
        'user_id' => (string)$userId,
        'location_id' => (string)array_pop($shuffledLocationIds)
    ];
}

// 如需添加额外用户的匹配(如示例中的150),可单独处理
// $extraUserId = '150';
// $matches[] = [
//     'user_id' => $extraUserId,
//     'location_id' => (string)$locations->random()->business_location_id
// ];

// 查看最终匹配结果
dd($matches);

代码说明

  • pluck('business_location_id'):从地点集合中提取所有地点ID,生成仅包含ID的新Collection
  • shuffle():打乱集合元素顺序,保证匹配的随机性
  • 遍历用户数组时,每次从打乱的ID数组末尾取出一个ID分配给用户;若ID耗尽,可重新打乱地点ID数组循环使用(根据业务需求决定是否允许地点重复分配)
  • 最终生成的$matches数组完全符合要求的输出格式

内容的提问来源于stack exchange,提问作者fionka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:15:28