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

如何替换多维数组中的重复值?保留首项其余替换为随机数

解决方案:保留首项重复值,替换其余为随机经纬度

没问题,我来帮你搞定这个需求!我们可以通过遍历数组+记录已出现的location的方式实现,同时生成合理的随机经纬度替换重复项。

首先先把你给出的原始数组整理成标准PHP格式:

$originalArray = [
    ['location' => [10.1111111, 106.2222222]],
    ['location' => [10.1111111, 106.2222222]],
    ['location' => [10.3333333, 106.444444444]],
    ['location' => [10.1111111, 106.2222222]],
    ['location' => [10.3333333, 106.444444444]]
];

接下来是处理逻辑的代码,每一步都有注释说明:

// 用来记录已经出现过的location(把经纬度转成字符串当键,方便快速判断重复)
$seenLocations = [];
// 存储处理后的最终数组
$processedArray = [];

// 遍历原始数组的每一个元素
foreach ($originalArray as $item) {
    // 将location数组转为字符串,作为判断重复的唯一标识
    $locationKey = implode(',', $item['location']);
    
    if (!isset($seenLocations[$locationKey])) {
        // 第一次遇到这个location,直接保留原数据
        $processedArray[] = $item;
        // 标记这个location已经出现过
        $seenLocations[$locationKey] = true;
    } else {
        // 重复的location,生成随机经纬度替换
        // 这里可以根据你的需求调整随机范围,示例是纬度10-11,经度106-107之间的随机值
        $randomLatitude = mt_rand(100000000, 110000000) / 10000000;
        $randomLongitude = mt_rand(1060000000, 1070000000) / 10000000;
        
        // 替换成随机值并加入结果数组
        $processedArray[] = [
            'location' => [$randomLatitude, $randomLongitude]
        ];
    }
}

// 可以打印结果查看效果
print_r($processedArray);

关键说明:

  • 重复判断:因为数组不能直接作为数组的键,所以我们用implode(',', $item['location'])把经纬度数组转成字符串,这样就能快速判断某个location是否已经出现过。
  • 随机值生成:示例里用mt_rand生成整数再除以对应倍数,得到带7位小数的随机值,你可以根据需要调整随机范围(比如如果需要更大的经纬度区间,或者不同的小数精度)。
  • 灵活性:如果你的随机值需要符合特定地理区域,只需要修改mt_rand的参数即可,比如把纬度范围改成90000000到110000000(对应9-11度),完全适配你的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:58:28