当前位置:首页 > PHP

PHP防重推荐实现

2026-04-03 09:57:18PHP

PHP防重推荐实现

防重推荐系统通常用于避免重复推荐相同内容,提升用户体验。以下是几种常见的实现方法:

基于Cookie或Session存储

利用Cookie或Session存储用户已浏览或推荐过的内容ID,每次推荐前检查是否已存在。

PHP防重推荐实现

session_start();
$recommendedItems = $_SESSION['recommended_items'] ?? [];

function isRecommended($itemId, &$recommendedItems) {
    if (in_array($itemId, $recommendedItems)) {
        return true;
    }
    array_push($recommendedItems, $itemId);
    $_SESSION['recommended_items'] = $recommendedItems;
    return false;
}

数据库记录用户行为

在数据库中创建用户行为表,记录用户与内容的交互记录,推荐时通过查询排除已交互内容。

CREATE TABLE user_behavior (
    user_id INT,
    item_id INT,
    behavior_type ENUM('view', 'click', 'purchase'),
    created_at TIMESTAMP
);
function getUnseenItems($userId, $limit = 10) {
    $query = "SELECT items.* FROM items 
              LEFT JOIN user_behavior ON items.id = user_behavior.item_id 
              AND user_behavior.user_id = ?
              WHERE user_behavior.item_id IS NULL 
              LIMIT ?";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$userId, $limit]);
    return $stmt->fetchAll();
}

使用Redis实现高效去重

利用Redis的集合数据结构存储用户已推荐内容,利用其高性能特性。

PHP防重推荐实现

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

function recommendItems($userId, $itemIds) {
    global $redis;
    $key = "user:{$userId}:recommended";
    $unseenItems = [];

    foreach ($itemIds as $itemId) {
        if (!$redis->sIsMember($key, $itemId)) {
            $unseenItems[] = $itemId;
            $redis->sAdd($key, $itemId);
        }
    }
    return $unseenItems;
}

混合内容策略

结合用户历史行为和内容相似度,使用协同过滤或内容相似度算法生成差异化推荐。

function hybridRecommendation($userId) {
    $collaborativeItems = getCollaborativeFilteringItems($userId);
    $contentBasedItems = getContentBasedItems($userId);

    $merged = array_merge($collaborativeItems, $contentBasedItems);
    $uniqueItems = array_unique($merged);

    return array_slice($uniqueItems, 0, 10);
}

时间衰减因子

为推荐记录添加时间衰减因子,较早的记录权重降低,使得旧内容有机会重新被推荐。

function getTimeWeightedItems($userId) {
    $query = "SELECT item_id, 
              TIMESTAMPDIFF(HOUR, created_at, NOW()) AS hours_passed 
              FROM user_behavior 
              WHERE user_id = ?";
    $stmt = $pdo->prepare($query);
    $stmt->execute([$userId]);

    $seenItems = $stmt->fetchAll(PDO::FETCH_ASSOC);
    $weightedItems = [];

    foreach ($seenItems as $item) {
        $weight = max(0.1, 1 - ($item['hours_passed'] / 72));
        $weightedItems[$item['item_id']] = $weight;
    }

    return $weightedItems;
}

以上方法可根据实际业务需求组合使用,Cookie/Session适合简单场景,数据库方案适合需要持久化的场景,Redis适合高性能要求,混合策略能提供更智能的推荐。

标签: PHP
分享给朋友:

相关文章

PHP实现会员管理

PHP实现会员管理

PHP实现会员管理的方法 数据库设计 创建会员表(members)包含字段:id(主键)、username、password(建议加密存储)、email、register_time、last_logi…

PHP审核流程实现

PHP审核流程实现

PHP审核流程实现方法 审核流程的实现通常涉及状态管理、权限控制和操作记录。以下是几种常见的实现方式: 状态机模式 定义审核状态常量,使用状态机控制流程流转: const STATUS_PENDI…

PHP实现流程

PHP实现流程

PHP实现流程的基本步骤 环境准备 安装PHP运行环境,如XAMPP、WAMP或直接安装PHP和Web服务器(如Apache/Nginx)。确保环境变量配置正确,可通过命令行输入php -v验证安装。…

PHP实现numpy

PHP实现numpy

在PHP中实现类似NumPy的功能,可以通过结合PHP的数组操作、扩展库或第三方工具来模拟部分功能。以下是几种常见方法: 使用PHP数组和内置函数 PHP的数组支持多维操作,结合内置数学函数可实现基…

PHP实现excel

PHP实现excel

PHP 实现 Excel 操作 读取 Excel 文件 使用 PHP 读取 Excel 文件可以通过 PhpSpreadsheet 库实现。安装该库可以通过 Composer: composer r…

mvc实现 PHP

mvc实现 PHP

MVC 模式概述 MVC(Model-View-Controller)是一种设计模式,用于将应用程序的逻辑分离为三个核心组件:模型(Model)处理数据,视图(View)负责展示,控制器(Contro…