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

二维数组去重:优先保留Flying Tour列非空行的实现需求

Hey,针对你这个二维数组去重且优先保留Flying Tour非空记录的需求,我给你整理了一套清晰的实现方案,用PHP来写的(毕竟你给的示例是PHP数组格式):

实现思路与代码

核心思路

  • 先以Access ID作为用户的唯一标识,把所有同用户的记录归为一组,方便后续筛选
  • 遍历每个用户的分组记录:优先挑选Flying Tour字段非空(去除首尾空格后仍不为空)的条目;如果该用户所有记录的这个字段都是空的,就保留第一条基础记录,确保不丢失用户信息
  • 最后把筛选后的记录重新整理成最终的去重数组

完整代码示例

<?php
// 补全后的示例数据(方便演示重复记录的处理逻辑)
$data = [
    [
        'Access ID' => 12345,
        'Registration Date' => '2018-02-27',
        'First Name' => 'Damian',
        'Last Name' => 'Martin',
        'Flying Tour' => ''
    ],
    [
        'Access ID' => 12345,
        'Registration Date' => '2018-02-28',
        'First Name' => 'Damian',
        'Last Name' => 'Martin',
        'Flying Tour' => 'Paris'
    ],
    [
        'Access ID' => 67890,
        'Registration Date' => '2019-05-10',
        'First Name' => 'Luna',
        'Last Name' => 'Gray',
        'Flying Tour' => ''
    ]
];

// 第一步:按Access ID分组,归集同用户的所有记录
$groupedRecords = [];
foreach ($data as $record) {
    $accessId = $record['Access ID'];
    if (!isset($groupedRecords[$accessId])) {
        $groupedRecords[$accessId] = [];
    }
    $groupedRecords[$accessId][] = $record;
}

// 第二步:筛选每组的有效记录
$uniqueData = [];
foreach ($groupedRecords as $userId => $records) {
    $selectedRecord = null;
    foreach ($records as $record) {
        // 排除空白字符干扰,检查Flying Tour是否真正非空
        if (!empty(trim($record['Flying Tour']))) {
            $selectedRecord = $record;
            break; // 找到符合条件的就停止遍历,保证优先性
        }
    }
    // 兜底:如果没有非空记录,保留第一条基础信息
    if ($selectedRecord === null) {
        $selectedRecord = $records[0];
    }
    $uniqueData[] = $selectedRecord;
}

// 输出结果验证
print_r($uniqueData);
?>

代码关键点解释

  • 分组逻辑:用Access ID作为键分组,确保同一用户的所有记录都被归集,不会遗漏任何待筛选的条目
  • 优先筛选:遍历分组内记录时,一旦找到Flying Tour非空的条目就立即选中并跳出循环,严格保证该条记录的优先保留权
  • 兜底处理:如果某个用户的所有记录里Flying Tour都是空的,就保留第一条记录,避免丢失注册日期、姓名等核心用户信息

简化写法(PHP7+适用)

如果你想用更简洁的代码实现分组,可以用array_reduce替代foreach循环:

// 用array_reduce简化分组步骤
$groupedRecords = array_reduce($data, function ($carry, $item) {
    $carry[$item['Access ID']][] = $item;
    return $carry;
}, []);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:24