У меня есть следующий код для создания таблицы ранжирования cron, но, похоже, она работает неправильно. Первые 4 раздела генерируют ожидаемые результаты и ранжируют игроков от 1 и выше на основании заявленных критериев, но последний раздел кода, похоже, не учитывает все 4 элемента, а только упорядочивает их на основе финального (четвертого) часть кода.
Мне нужна помощь, чтобы выяснить, что не так с последней частью кода (или более, если применимо) и как ее исправить.
Я потратил несколько часов, пытаясьСам исправляю код, в том числе онлайн-исследования стеков, а также играю с кодом. Я новичок в PHP и пытаюсь выяснить, что я делаю неправильно.
<?php
include("config.php");
connect();
// Update rankings every 5 mins.
$get_gold = mysqli_query($mysqli,"SELECT `id`,`gold` FROM `stats` ORDER BY `gold` DESC") or die(mysqli_error($mysqli));
$i = 1;
$rank = array();
while($gold = mysqli_fetch_assoc($get_gold)){
$rank[$gold['id']] = $gold['gold'];
mysqli_query($mysqli,"UPDATE `ranking` SET `gold`='".$i."' WHERE `id`='".$gold['id']."'") or die(mysqli_error($mysqli));
$i++;
}
$get_food = mysqli_query($mysqli,"SELECT `id`,`food` FROM `stats` ORDER BY `food` DESC") or die(mysqli_error($mysqli));
$i = 1;
$rank = array();
while($food = mysqli_fetch_assoc($get_food)){
$rank[$food['id']] += $food['food'];
mysqli_query($mysqli,"UPDATE `ranking` SET `food`='".$i."' WHERE `id`='".$food['id']."'") or die(mysqli_error($mysqli));
$i++;
}
$get_warrior = mysqli_query($mysqli,"SELECT `id`,`warrior` FROM `unit` ORDER BY `warrior` DESC") or die(mysqli_error($mysqli));
$i = 1;
$rank = array();
while($warrior = mysqli_fetch_assoc($get_warrior)){
$rank[$warrior['id']] += ($warrior['warrior'] * 10);
mysqli_query($mysqli,"UPDATE `ranking` SET `warrior`='".$i."' WHERE `id`='".$warrior['id']."'") or die(mysqli_error($mysqli));
$i++;
}
$get_defender = mysqli_query($mysqli,"SELECT `id`,`defender` FROM `unit` ORDER BY `defender` DESC") or die(mysqli_error($mysqli));
$i = 1;
$rank = array();
while($defender = mysqli_fetch_assoc($get_defender)){
$rank[$defender['id']] += ($defender['defender'] * 10);
mysqli_query($mysqli,"UPDATE `ranking` SET `defender`='".$i."' WHERE `id`='".$defender['id']."'") or die(mysqli_error($mysqli));
$i++;
}
asort($rank);
$rank2 = array_reverse($rank,true);
$i = 1;
foreach($rank2 as $key => $val){
mysqli_query($mysqli,"UPDATE `ranking` SET `overall`='".$i."' WHERE `id`='".$key."'") or die(mysqli_error($mysqli));
$i++;
}
?>
При выполнении кода я получаю следующие уведомления PHP:
Уведомление PHP:Неопределенное смещение: 9 в /var/www/vhosts/videogamesnews.co.uk/httpdocs/cron_rankings.php в строке 20
Я получаю по одной строке уведомления php для каждого игрока в игре (ранжируется9 в этом примере) в разделах 2, 3 и 4 кода (указывая на строки 20, 29 и 38).
Ожидаемый результат этого кода - использование разделов 1 - 4 для индивидуального ранжирования игроков в зависимости от их игрового положения, что в настоящее время работает нормально и обновляет базу данных, как и ожидалось. В последнем разделе, который обновляется в целом, следует затем снова оценивать тех же игроков, но на основе результатов предыдущих 4 рангов. На данный момент этого не происходит, и вместо этого он обновляет «общий» на основе четвертого раздела кода - «защитник».