Note that there are some explanatory texts on larger screens.

plurals
  1. POarsort(...) creating duplicates
    text
    copied!<p>I'm trying to make a tracking program for an online game, and I need to sort gained experience by whoever has gained the most experience.</p> <p>However, what happens is, say I'm tracking the users (a, b, c, d, e, f, g), and the users (b, e, g) have gained 0 experience. It will show (b) 3 times, because there is 3 people that have gained 0 experience and (b) is the first person, out of 3, that have gained 0 experience. I can't think of how to show you just what I'm doing without the actual file, so here's the file's contents:</p> <pre><code>&lt;?php $participants = array("Quuxx", "Aeterna", "Ts Danne", "Marsman", "PFC Mage"); $skills = array("overall", "attack", "defense", "strength", "constitution", "ranged", "prayer", "magic", "cooking", "woodcutting", "fletching", "fishing", "firemaking", "crafting", "smithing", "mining", "herblore", "agility", "thieving", "slayer", "farming", "runecrafting", "hunter", "construction", "summoning", "dungeoneering"); $database = mysql_connect("mysql.alwaysdata.com", "*", "*"); if (!$database) { die('Could not connect to database: ' . mysql_error()); } mysql_select_db("tracker_tkoblitz", $database); if (isset($_GET['track'])) { for ($i = 0; $i &lt; count($participants); $i++) { startTracker($participants[$i]); } } shit(array_search($_GET['skill'], $skills)); function startTracker($username) { $stats = getStats($username); mysql_query("INSERT IGNORE INTO stats (username, stats) VALUES ('$username', '$stats')"); } function grabStats($username) { $query = mysql_query("SELECT * FROM stats WHERE username LIKE '$username'"); while ($row = mysql_fetch_array($query)) { return $row['stats']; } } function shit($lol) { global $participants, $skills; sort($participants); echo '&lt;head&gt;&lt;title&gt;Fight Tracker&lt;/title&gt;&lt;link rel="stylesheet" href="style.css"&gt;&lt;/head&gt;&lt;body&gt;&lt;div align="center"&gt;&lt;img src="http://www.runehead.com/clans/banners/clansolace-6617078.png"&gt;&lt;table id="atable"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th scope="col"&gt;Username&lt;/th&gt;&lt;th scope="col"&gt;Skill&lt;/th&gt;&lt;th scope="col"&gt;Level&lt;/th&gt;&lt;th scope="col"&gt;Starting experience&lt;/th&gt;&lt;th scope="col"&gt;Ending experience&lt;/th&gt;&lt;th scope="col"&gt;Gained experience&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;'; for ($i = 0; $i &lt; count($participants); $i++) { $level = getStat(grabStats($participants[$i]), 1, $lol); $starting = getStat(grabStats($participants[$i]), 2, $lol); //2nd param: rank,lvl,xp $stats = getStats($participants[$i]); //2nd param: rank,lvl,xp $current = getStat($stats, 2, $lol); $gained[] = $current - $starting; //echo '&lt;tr&gt;&lt;td class="odd"&gt;' . $participants[$i] . '&lt;/td&gt;&lt;td class="odd"&gt;&lt;img src="images/' . $skills[$lol] . '.png"&gt;&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($level) . '&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($starting) . '&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($current) . '&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($gained) . '&lt;/td&gt;&lt;/tr&gt;'; $statss[] = array($participants[$i], $level, $starting, $current, $gained[$i]); } arsort($gained); foreach ($gained as $gain) { $skillData = getSkillData($gain, $statss); $name = $skillData[0]; $level = $skillData[1]; $start = $skillData[2]; $current = $skillData[3]; $gainedXP = $skillData[4]; echo '&lt;tr&gt;&lt;td class="odd"&gt;' . $name . '&lt;/td&gt;&lt;td class="odd"&gt;&lt;img src="images/' . $skills[$lol] . '.png"&gt;&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($level) . '&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($start) . '&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($current) . '&lt;/td&gt;&lt;td class="odd"&gt;' . number_format($gainedXP) . '&lt;/td&gt;&lt;/tr&gt;'; } echo '&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;&lt;form name="skill_select" action="view_tracker.php" method="GET"&gt;&lt;div align="center"&gt;&lt;font color="#03F"&gt;View a different skill: &lt;/font&gt;&lt;select name="skill"&gt;&lt;option value="overall"&gt;Overall&lt;/option&gt;&lt;option value="attack"&gt;Attack&lt;/option&gt;&lt;option value="defence"&gt;Defence&lt;/option&gt;&lt;option value="strength"&gt;Strength&lt;/option&gt;&lt;option value="constitution"&gt;Constitution&lt;/option&gt;&lt;option value="ranged"&gt;Ranged&lt;/option&gt;&lt;option value="prayer"&gt;Prayer&lt;/option&gt;&lt;option value="magic"&gt;Magic&lt;/option&gt;&lt;option value="cooking"&gt;Cooking&lt;/option&gt;&lt;option value="woodcutting"&gt;Woodcutting&lt;/option&gt;&lt;option value="fletching"&gt;Fletching&lt;/option&gt;&lt;option value="fishing"&gt;Fishing&lt;/option&gt;&lt;option value="firemaking"&gt;Firemaking&lt;/option&gt;&lt;option value="crafting"&gt;Crafting&lt;/option&gt;&lt;option value="smithing"&gt;Smithing&lt;/option&gt;&lt;option value="mining"&gt;Mining&lt;/option&gt;&lt;option value="herblore"&gt;Herblore&lt;/option&gt;&lt;option value="agility"&gt;Agility&lt;/option&gt;&lt;option value="thieving"&gt;Thieving&lt;/option&gt;&lt;option value="slayer"&gt;Slayer&lt;/option&gt;&lt;option value="farming"&gt;Farming&lt;/option&gt;&lt;option value="runecrafting"&gt;Runecrafting&lt;/option&gt;&lt;option value="hunter"&gt;Hunter&lt;/option&gt;&lt;option value="construction"&gt;Construction&lt;/option&gt;&lt;option value="summoning"&gt;Summoning&lt;/option&gt;&lt;option value="dungeoneering"&gt;Dungeoneering&lt;/option&gt;&lt;/select&gt; &lt;input type="submit" value="View" /&gt;&lt;/div&gt;&lt;/form&gt;&lt;/body&gt;'; } function read($file) { if (($handle = fopen($file, "r")) !== FALSE) { while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { for ($c = 0; $c &lt; count($data); $c++) { $lines[] = $data[$c]; } } fclose($handle); } return $lines; } function getSkillData($gain, $stats) { foreach ($stats as $stat) { if ($stat[4] == $gain) { return $stat; } } } function getStats($username) { $curl = curl_init(); curl_setopt ($curl, CURLOPT_URL, "http://hiscore.runescape.com/index_lite.ws?player=" . $username); curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout); curl_setopt ($curl, CURLOPT_USERAGENT, sprintf("Mozilla/%d.0", rand(4, 5))); curl_setopt ($curl, CURLOPT_HEADER, (int) $header); curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($curl, CURLOPT_VERBOSE, 1); $httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE); $output = curl_exec($curl); curl_close ($curl); if (strstr($output, "&lt;html&gt;&lt;head&gt;&lt;title&gt;")) { return false; } return $output; } function getStat($stats, $row, $skill) { $stats = explode("\n", $stats); $levels = explode(",", $stats[$skill]); return $levels[$row]; } mysql_close($database); ?&gt; </code></pre> <p>Here's a live demo of that same exact file: <a href="http://tracker.alwaysdata.net/solace/view_tracker.php" rel="nofollow">http://tracker.alwaysdata.net/solace/view_tracker.php</a></p> <p>Notice PFC Mage is there twice, when it should show PFC Mage and Quuxx separately. Everything else sorts just fine, any ideas?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload