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

技术问询:合并两个数组表及获取网站已通过好友ID的实现问题

Hey there! Let's tackle your two questions one by one:

问题一:如何合并两个数组表?

合并数组的方法取决于你的具体需求(比如是索引数组还是关联数组,是否需要去重等),这里给你几种常用的PHP实现方式:

  • 普通索引数组合并:用array_merge()函数,它会把第二个数组的元素追加到第一个数组末尾,并且自动重新索引:

    $array1 = [1, 2, 3];
    $array2 = [4, 5, 6];
    $mergedArray = array_merge($array1, $array2);
    // 输出:Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
    
  • 关联数组合并:同样用array_merge(),但如果两个数组存在相同的键,后一个数组的值会覆盖前一个的:

    $userInfo1 = ['name' => 'Bob', 'age' => 30];
    $userInfo2 = ['age' => 31, 'city' => 'London'];
    $mergedInfo = array_merge($userInfo1, $userInfo2);
    // 输出:Array ( [name] => Bob [age] => 31 [city] => London )
    
  • 合并并去重:如果合并后需要去除重复元素,可以先合并再用array_unique():

    $arrayA = [2, 4, 6];
    $arrayB = [4, 6, 8];
    $uniqueMerged = array_unique(array_merge($arrayA, $arrayB));
    // 输出:Array ( [0] => 2 [1] => 4 [2] => 6 [5] => 8 )
    
  • 保留原索引的合并:用+运算符,这种方式会保留第一个数组的键,相同键的元素只会保留第一个数组的:

    $arrayX = [0 => 'apple', 1 => 'banana'];
    $arrayY = [1 => 'cherry', 2 => 'date'];
    $mergedWithKeys = $arrayX + $arrayY;
    // 输出:Array ( [0] => apple [1] => banana [2] => date )
    

问题二:获取网站上的所有用户好友状态

先提个关键问题:你当前的代码存在SQL注入风险——直接把$id和$yes拼到SQL语句里,哪怕用了prepare(),这种写法也不安全。另外,你现在查的是所有字段,但其实只需要提取好友的ID,我们可以优化一下:

改进后的代码(安全且高效):

$currentUserId = $_SESSION['user_id'];
$acceptedStatus = 1; // 假设accepted是整数类型,直接用整数更规范

// 用参数占位符避免SQL注入,同时只查询需要的好友ID
$stmt = $db2->prepare("
    SELECT 
        CASE 
            WHEN user1 = ? THEN user2 
            ELSE user1 
        END AS friend_id
    FROM friend_requests 
    WHERE (user1 = ? OR user2 = ?) 
      AND accepted = ?
");

// 绑定参数并执行查询
$stmt->execute([$currentUserId, $currentUserId, $currentUserId, $acceptedStatus]);

// 获取所有好友ID组成的数组
$friendIds = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);

代码说明:

  1. SQL注入防护:用?作为参数占位符,通过execute()传递参数,数据库会自动处理输入,避免恶意注入。
  2. 精准获取好友ID:用CASE语句判断当前用户是user1还是user2,从而提取对应的好友ID(比如当前用户是发起请求的人,好友就是user2;如果是被添加的人,好友就是user1)。
  3. 性能优化:只查询需要的friend_id字段,而不是SELECT *,减少数据传输和内存消耗。

如果需要获取好友的详细信息:

如果要拿到好友的用户名、头像等信息,可以和用户表做关联查询:

$stmt = $db2->prepare("
    SELECT u.*
    FROM friend_requests fr
    JOIN users u ON 
        (fr.user1 = ? AND u.id = fr.user2) 
        OR (fr.user2 = ? AND u.id = fr.user1)
    WHERE fr.accepted = ?
");
$stmt->execute([$currentUserId, $currentUserId, $acceptedStatus]);
$friends = $stmt->fetchAll(PDO::FETCH_ASSOC);

这样就能得到所有已通过好友关系的用户详细数据啦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:48:54