Как я проверяю целое число PHP внутри переменной?
Я включил обзоры Yelp в свой каталог сайтов, где каждое место проведения имеет идентификатор Yelp, возвращающий количество отзывов и общий балл.
После успешного запроса MySQL по всем сведениям о месте я вывожу результаты базы данных, отформатированной для пользователя. Элемент Yelp:
while ($searchresults = mysql_fetch_array($sql_result)) {
if ($yelpID = $searchresults['yelpID']) {
require('yelp.php');
if ( $numreviews > 0 ) {
$yelp = '<img src="'.$ratingimg.'" border="0" /> Read <a href="'.$url.'" target="_blank">'.$numreviews.' reviews</a> on <a href="http://www.tkqlhce.com/click-7842347-10756740-1314724701000" target="_blank"><img src="graphics/yelp_logo_50x25.png" border="0" /></a><br />';
} else {
$yelp = '';
}
} //END if ($yelpID = $searchresults['yelpID']) {
} //END while ($searchresults = mysql_fetch_array($sql_result)) {
Файл yelp.php возвращает:
$yrating = $result->rating;
$numreviews = $result->review_count;
$ratingimg = $result->rating_img_url;
$url = $result->url;
Если у места есть идентификатор Yelp и один или несколько обзоров, то вывод отображается правильно, но если у места нет идентификатора Yelp или нулевых обзоров, то он отображает номер обзора Yelp предыдущего места.
Я проверил тип переменной $numreviews, и это целое число. До сих пор я пробовал несколько вариантов оператора "if ( $numreviews > 0)", например, проверял его на>=1,!$ Numreviews и т. Д., Также преобразовывал целое число в строку и сравнивал его с другими строками. Ошибок нет, и печать всех возвращаемых переменных дает правильное количество проверок для каждого свойства, а объекты, не имеющие идентификатора, или отзывы, не возвращающие ничего (в отличие от нуля). Я также сравнил это напрямую с $result->review_count с той же проблемой.
Есть ли лучший способ сделать сравнение или лучший формат переменной для работы, чтобы получить правильный результат?
РЕДАКТИРОВАТЬ: заявление if ($yelpID = $searchresults['yelpID']) {
не работает как следует. Он идентичен другим операторам в файле, проверяющим содержимое строки, которые корректно работают с заданной переменной, например, $fbID = $searchresults['fbID'] и т. Д.
Когда я изменился require('yelp.php');
to require_once('yelp.php'); все выходные данные объекта изменились на показ только первого повторного результата. Просматривая выводимые места, ошибка появляется на первом месте после успешного результата, что заставляет меня думать, что в файле yelp.php есть распространенный фрагмент кода, вызывающий if ($yelpID = $searchresults['yelpID']) {
игнорируется до тех пор, пока не будет найден положительный результат (yelpID в БД), т.е. каждое место проведения правильно отображается с количеством рев, пока не будет найдено пустое место. Затем отображается количество отзывов предыдущих мест, и это продолжается для каждого пустого места, пока место не будет найдено с идентификатором yelpID, когда оно снова покажет правильный номер. Ошибка повторяется на выходе следующего объекта без идентификатора yelpID и так далее.
Пример ошибочного вывода: (строка 1 - это var_dump)
строка (23) "bayview-hotel-bushmills"
Отель Бэйвью
Читайте 3 отзыва на тявкать
Benedicts
Прочитайте 3 отзыва о yelp (обратите внимание, что вывод var_dump отсутствует, эта ссылка содержит URL-адрес для записи Bayview Hotel выше)
Строка (31) "Бушмиллс-Инн-Отель-Бушмиллс-2"
Бушмиллс Инн Отель
Читайте 7 отзывов на тявкать
Я подозреваю, что это будет новый вопрос, а не загромождать / путать этот вопрос дальше?
Конец редактирования
Примечание: я знаю о необходимости обновления до mysqli, но у меня есть тысячи строк устаревшего кода для обновления. Сейчас я работаю над функциональностью, прежде чем рассматривать код для лучшей практики.
1 ответ
Поскольку yelp.php является своего рода черным ящиком; лучшим объяснением этого поведения будет то, что он устанавливает эти переменные, только если находит совпадение. Обновление вашего кода до этого должно исправить это:
unset($yrating, $numreviews, $ratingimg, $url);
require('yelp.php');
Я также заметил это своеобразное выражение if, понимаете ли вы, что это присваивание или это ошибка копирования / вставки? Если вы хотите проверить (это то, что если для)
if ($yelpID == $searchresults['yelpID']) {