当前位置:首页 > 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实现图文聊天的方法 数据库设计 创建数据库表存储聊天消息,包含字段如消息ID、发送者ID、接收者ID、消息内容、消息类型(文本/图片)、发送时间等。使用MySQL或其他数据库管理系统。 CRE…

PHP实现流程

PHP实现流程

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

PHP实现coap

PHP实现coap

PHP 实现 CoAP 协议 CoAP(Constrained Application Protocol)是一种专为物联网设备设计的轻量级协议,基于 REST 架构。PHP 可以通过以下方式实现 Co…

PHP实现OCR

PHP实现OCR

PHP实现OCR的方法 使用PHP实现OCR(光学字符识别)可以通过多种方式完成,以下为几种常见方法: 使用Tesseract OCR Tesseract是一个开源的OCR引擎,支持多种语言。可以通…

PHP 实现aop

PHP 实现aop

PHP 实现 AOP(面向切面编程) AOP(Aspect-Oriented Programming)是一种编程范式,用于将横切关注点(如日志、事务、权限等)从业务逻辑中分离出来。PHP 本身不原生支…

PHP实现HTML

PHP实现HTML

PHP实现HTML的方式 PHP作为服务器端脚本语言,可以直接嵌入HTML代码中生成动态网页内容。以下是几种常见实现方式: 混合编写 直接在.php文件中混合PHP与HTML代码: <…