当前位置:首页 > PHP

php 实现@好友

2026-03-12 23:09:37PHP

实现@好友功能

在PHP中实现@好友功能,通常涉及前端交互和后端处理的结合。以下是一个完整的实现方案:

前端部分 在文本输入框中监听用户输入,检测@符号并显示好友列表供选择。可以使用jQuery或原生JavaScript实现:

$('#content').on('input', function() {
    let content = $(this).val();
    let lastAtPos = content.lastIndexOf('@');

    if(lastAtPos !== -1) {
        let query = content.substring(lastAtPos + 1);
        if(query.length > 0) {
            $.ajax({
                url: '/get_friends.php',
                data: {q: query},
                success: function(data) {
                    showFriendList(data);
                }
            });
        }
    }
});

后端处理 创建获取好友列表的接口,根据输入的关键词返回匹配的好友:

// get_friends.php
$q = $_GET['q'] ?? '';
$friends = []; // 从数据库查询好友列表

// 示例数据库查询
$stmt = $pdo->prepare("SELECT id, username FROM users WHERE username LIKE ? LIMIT 10");
$stmt->execute(["%$q%"]);
$friends = $stmt->fetchAll(PDO::FETCH_ASSOC);

header('Content-Type: application/json');
echo json_encode($friends);

存储处理 当用户提交内容时,解析内容中的@好友并存储:

// store_content.php
$content = $_POST['content'];
preg_match_all('/@([^\s]+)/', $content, $matches);

foreach($matches[1] as $username) {
    // 获取用户ID并建立关联关系
    $stmt = $pdo->prepare("SELECT id FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();

    if($user) {
        // 存储用户提及关系
        $stmt = $pdo->prepare("INSERT INTO mentions (content_id, user_id) VALUES (?, ?)");
        $stmt->execute([$contentId, $user['id']]);
    }
}

显示处理 在显示内容时,将@用户名转换为可点击的链接:

function parseMentions($content) {
    return preg_replace('/@([^\s]+)/', '<a href="/user/$1">@$1</a>', $content);
}

数据库设计

需要创建相关表来存储提及关系:

CREATE TABLE mentions (
    id INT AUTO_INCREMENT PRIMARY KEY,
    content_id INT NOT NULL,
    user_id INT NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (content_id) REFERENCES contents(id),
    FOREIGN KEY (user_id) REFERENCES users(id)
);

通知功能

当用户被@时,可以添加通知功能:

// 在存储提及关系后
$notification = "你被@提及了";
$stmt = $pdo->prepare("INSERT INTO notifications (user_id, content, is_read) VALUES (?, ?, 0)");
$stmt->execute([$user['id'], $notification]);

性能优化

对于大量用户的情况,可以考虑以下优化:

php 实现@好友

  • 使用Redis缓存好友列表
  • 对提及检测使用更高效的正则表达式
  • 实现异步处理提及通知

这个实现方案涵盖了从用户输入到存储再到显示的完整流程,可以根据具体需求进行调整和扩展。

标签: 好友php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

文件上传的基本实现 在PHP中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php实现推送消息推送消息

php实现推送消息推送消息

PHP 实现消息推送的方法 使用 WebSocket 实现实时推送 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,适合实现实时消息推送。 安装 Ratchet 库(WebSo…

php实现多态

php实现多态

多态的概念 多态是面向对象编程的三大特性之一,指同一个方法在不同类中有不同实现方式。PHP通过继承和接口实现多态。 通过继承实现多态 父类定义方法,子类重写该方法实现不同行为: class Ani…