gpt4 book ai didi

PHP in_array() 函数并非在所有情况下都有效

转载 作者:行者123 更新时间:2023-11-29 12:31:43 28 4
gpt4 key购买 nike

所以我遇到了一个无法解决的奇怪问题,我不知道问题是什么以及应该如何解决它。

我有一个简单的加载图像的系统,称为快照。每一张快照,都有喜欢。这就是我加载快照和相关(数量)喜欢的方式:

/*
* Get the snaps
*/
try {
$select_snaps_query = '
SELECT snap.snap__id, snap.snap__user__id, snap.snap__4_3_loc, snap.snap__caption, snap.snap__time, user.user__id, user.user__username, user.user__profile_picture
FROM snap
JOIN user ON(user.user__id = snap.snap__user__id)
WHERE snap__user__id IN(
SELECT followed__user__id
FROM follow
WHERE follower__user__id = :follower__user__id
) ORDER BY snap__time DESC';
$prep_select_snaps = $conn->prepare($select_snaps_query);
$prep_select_snaps->bindParam(':follower__user__id', $user__id, PDO::PARAM_STR);
$prep_select_snaps->execute();
$snaps_result = $prep_select_snaps->fetchAll();
$snaps_count = count($snaps_result);
}
catch(PDOException $e) {
$conn = null;
header('Location: http://www.scrapll.com');
}

if($snaps_count != 0) {
foreach($snaps_result AS $snaps_row) {
$snap__id = $snaps_row['snap__id'];
$snap__4_3_loc = $snaps_row['snap__4_3_loc'];
$snap__caption = $snaps_row['snap__caption'];
$snap__time = $snaps_row['snap__time'];
$snap__user__id = $snaps_row['snap__user__id'];
$snap__username = $snaps_row['user__username'];
$snap__profile_picture = $snaps_row['user__profile_picture'];

if($snap__profile_picture == null) {
$snap__profile_picture = 'default.fw.png';
}

$like_row = array();

// load the likes for each snap
try {
$select_like_query = '
SELECT like__id, like__user__id
FROM `like`
WHERE like__snap__id = :like__snap__id';
$prep_select_like = $conn->prepare($select_like_query);
$prep_select_like->bindParam(':like__snap__id', $snap__id, PDO::PARAM_STR);
$prep_select_like->execute();
$like_result = $prep_select_like->fetchAll();
$like_count = count($like_result);
}
catch(PDOException $e) {
$conn = null;
header('Location: http://www.scrapll.com');
}

if(isset($like_result)) {
foreach($like_result AS $like_row) {
echo $like__user__id = $like_row['like__user__id'] . '<br/>';
}
}
}

我在快照结果集的 foreach 循环内加载点赞。

所以,我需要做的是检查登录用户是否喜欢快照。如果是这样,则必须出现不同的不同按钮。然而,使用我现在拥有的代码,对于一个喜欢快照的用户来说,但是当另一个用户也喜欢同一个快照时,两个“喜欢者”之一不会获得“不喜欢”按钮,即使他/她很喜欢它。

这是我的代码,用于确定当前登录的用户是否已经喜欢该快照。如果是这样,将显示不同的标记,否则,将显示带有类似按钮的默认快照:

// if liked by currently logged in user
if(in_array($user__id, $like_row)) {
echo '
<div class="snap_item">
<div class="snap_item_following_info">
<img class="snap_item_following_img" src="res/stat/img/user/profile/small/'.$snap__profile_picture.'" alt="@'.$snap__username.'" />
<a class="snap_item_following_name" href="me.html?id='.$snap__user__id.'">@'.$snap__username.'</a>
<!--<div class="snap_too">

</div>-->
</div>
<img class="snap_img" src="'.$snap__4_3_loc.'" alt="'.$snap__id.'" />
<div class="like_heart"></div>
<div class="snap_info">
<div class="snap_text">'.$snap__caption. 'LIKED BY ME</div>
<div class="snap_sub_info">
<span class="snap_time">'.time_ago($snap__time).'</span>
<div class="like unlike" style="background: red;">
<div class="like_icon liked"></div>
<div class="like_no_active" style="color: #FFF">'.$like_count.'</div>
</div>
</div>
</div>
</div>';
}
// if NOT liked by the currently logged in user
else {
echo '
<div class="snap_item">
<div class="snap_item_following_info">
<img class="snap_item_following_img" src="res/stat/img/user/profile/small/'.$snap__profile_picture.'" alt="@'.$snap__username.'" />
<a class="snap_item_following_name" href="me.html?id='.$snap__user__id.'">@'.$snap__username.'</a>
<!--<div class="snap_too">

</div>-->
</div>
<img class="snap_img" src="'.$snap__4_3_loc.'" alt="'.$snap__id.'" />
<div class="like_heart"></div>
<div class="snap_info">
<div class="snap_text">'.$snap__caption.'</div>
<div class="snap_sub_info">
<span class="snap_time">'.time_ago($snap__time).'</span>
<div class="like" style="background: white;">
<div class="like_icon"></div>
<div class="like_no_active">'.$like_count.'</div>
</div>
</div>
</div>
</div>';
}

如您所见,我使用 in_array() 函数来查看当前登录用户的用户 ID ($user__id) 是否存在于 Likes 查询结果集的数组中。

有人发现我的代码中有问题吗?

编辑

var_dump() 显示以下内容:

array(2) { ["like_id"]=>string(3) "170"
["like__user__id"]=>string(1) "2" }

它在每个快照中都显示了类似的愚蠢行为。对于另一个快照,它说:

array(2) { ["like_id"]=>string(3) "171"
["like__user__id"]=>string(1) "2" }

这些出现在应该显示“不像”按钮的快照上。此转储来自用户页面,该页面正确显示了不同按钮:

array(2) { ["like_id"]=>string(3) "170"
["like__user__id"]=>string(1) "2" }

这就是 var_dump() 显示的内容

最佳答案

如果您发布的第二段代码紧随第一段代码之后,那么它正在使用 foreach 循环的最后一次迭代中的 $like_row,并且仅当当前用户与当前用户匹配的用户时才有效。查询返回的最后一行类似行。

相反,在第一部分中,在循环点赞集时检查当前用户是否喜欢该帖子。

$this_user_likes = false;
if(isset($like_result)) {
foreach($like_result AS $like_row) {
if ($like_row['like__user__id'] === $user__id) $this_user_likes = true;
}
}

然后在第二部分使用

if (in_array($user__id, $like_row)) {...

您可以使用之前检查的结果。

if ($this_user_likes) {...

顺便说一下,在第二部分中,您似乎在 ifelse 部分中回显了许多相同的 html。您可以只将重复的部分包含一次,然后仅将不同的部分放入 if...else 中。只是一个建议。

关于PHP in_array() 函数并非在所有情况下都有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27386696/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com