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

如何用PHP获取数组首个元素?解决array_slice返回结果异常问题

问题解决:获取数组第一个元素并与用户ID正确比较

核心问题分析

  1. array_slice($friends, 0, 1) 返回的是包含单个元素的子数组,而非数组的第一个元素本身,所以你看到cut是数组而非单个值。
  2. 即使拿到第一个元素,它是Friend类的对象,不能直接和$userId(整数)比较,需要提取对象中的user_id属性。

修正后的代码

1. 提取第一个元素并正确比较ID

直接用数组索引[0]获取第一个元素,再访问其user_id属性(假设Friend类有公开的user_id属性,或对应getter方法):

$userId = $_SESSION['user_id'];
$friends = $displaying->getFriends($id->getUserId(), $userId);

// 先判断数组非空,避免索引越界
if (!empty($friends)) {
    // 获取第一个Friend对象
    $firstFriend = $friends[0];
    // 提取user_id,根据Friend类实现调整,比如用getter
    $firstFriendId = $firstFriend->user_id; // 或 $firstFriend->getUserId();

    $result = $firstFriendId != $userId;
} else {
    // 无好友时的逻辑,按需设置result值
    $result = true;
}

2. 清理getFriends函数冗余代码

你的SQL语句未使用:session参数,可删除无用绑定:

public function getFriends(int $id): array
{
    $sql = $this->pdo->prepare("
        SELECT user.user_id, avatar, first_name, last_name
        FROM user
        JOIN friend ON user.user_id = friend.request_from_id
        where request_to_id = :id AND friend.status='znajomy'
        UNION ALL 
            SELECT user.user_id, avatar, first_name, last_name
            FROM user
            JOIN friend ON user.user_id = friend.request_to_id
            where request_from_id = :id AND friend.status='znajomy'");
    $sql->bindParam(':id', $id, PDO::PARAM_INT);
    $sql->execute();

    $friends = [];
    while ($row = $sql->fetch()) {
        $friends[] = new Friend(
            $row['user_id'],
            $row['avatar'],
            $row['first_name'],
            $row['last_name']);
    }
    return $friends;
}

调用时无需传第二个参数:

$friends = $displaying->getFriends($id->getUserId());

额外说明

  • 若Friend类的user_id是私有属性,需确保类中有对应的getter方法(如public function getUserId(): int { return $this->user_id; }),再用$firstFriend->getUserId()获取ID。
  • 必须先判断数组是否为空,避免访问$friends[0]时出现索引越界错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:15:41