如何用PHP获取数组首个元素?解决array_slice返回结果异常问题
问题解决:获取数组第一个元素并与用户ID正确比较
核心问题分析
array_slice($friends, 0, 1)返回的是包含单个元素的子数组,而非数组的第一个元素本身,所以你看到cut是数组而非单个值。- 即使拿到第一个元素,它是
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
相关产品推荐
相关产品推荐

