Итак, у меня есть эта странная проблема, которую я не могу решить, я не знаю, в чем проблема, и как я должен ее решить.Функция PHP in_array() не работает во всех случаях
У меня есть простая система, которая загружает изображения, называемые привязками. Каждой привязке нравится. Это, как я загрузить защелки и соответствующие (количество) любит:
/*
* 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/>';
}
}
}
загружает любит внутри цикла Еогеаспа из результирующего набора защелок.
Итак, мне нужно проверить, не понравился ли зарегистрированный пользователь. Если это так, должна появиться другая непохожий кнопка. Тем не менее, с кодом, который у меня есть сейчас, он появляется для одного пользователя, которому понравилась привязка, но когда другому пользователю нравится одна и та же привязка, один из двух «симплееров» не получает непохожий на кнопку, хотя он/ей понравилось.
Это мой код, чтобы узнать, понравился ли пользователь в данный момент, как привязка. Если да, то другая разметка будет отображаться, в противном случае, по умолчанию оснастки с как кнопкой показывает:
// 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(), чтобы увидеть, если идентификатор пользователя вошедших в user ($ user__id) присутствует в массиве набора результатов подобного запроса.
Кто-нибудь видит проблему в моем коде?
РЕДАКТИРОВАТЬ
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() показывает
где '$ like_row = array();' фактически заполнено - потому что здесь его всегда пусто? – birdspider
Вместо того, чтобы заставлять нас пробираться через весь ваш код, разрабатывая то, что он делает, почему бы не показать нам var_dump(), показывая только несколько записей из $ like_row –
Если ваши значения находятся в вашем массиве, но не распознаются, попробуйте использовать значение 'strict' для этой функции. ** Если третий параметр strict установлен в TRUE, функция in_array() также проверит типы иглы в стоге сена. ** Трудно диагностировать прошлое, что вы поставили, без правильного угадывания ... – Rasclatt