Log in

View Full Version : Need 'while' help please



MrRSMan
12-16-2009, 12:17 PM
I have this code for creating an array of all the tables in a database:


$tables = array();
$rows = mysql_query("SHOW TABLES FROM {$database}");
while ($row = mysql_fetch_array($rows)) {
$tables[] = $row[0];
}

What I need to do now is take the names of each of those tables (in the array) and insert them into this code:


function getStats($tables) {
// Create an array of skills
$skills = array('Overall', 'Attack', 'Defence', 'Strength', 'Hitpoints', 'Ranged', 'Prayer', 'Magic', 'Cooking', 'Woodcutting', 'Fletching', 'Fishing', 'Firemaking', 'Crafting', 'Smithing', 'Mining', 'Herblore', 'Agility', 'Thieving', 'Slayer', 'Farming', 'Runecraft', 'Hunter', 'Construction', 'Summoning', 'Duel Tournament', 'Bounty Hunters', 'Bounty Hunter Rogues', 'Fist of Guthix');


$hs = @file_get_contents('http://hiscore.runescape.com/index_lite.ws?player=' . $tables);
$out = Array();

if (! $hs)
return null;
if (strpos($hs, '404 - Page not found'))
return null;

$stats = explode("\n", $hs);

// Loop through the skills
for($i = 0; $i<count($skills);$i++) {
// Explode each skill into 3 values - rank, level, exp
$stat = explode(',', $stats[$i]);
$out[$skills[$i]] = Array();
$out[$skills[$i]]['rank'] = $stat[0];
$out[$skills[$i]]['level'] = $stat[1];
$out[$skills[$i]]['xp'] = $stat[2];
}
return $out;
}

$out = getStats($row['username']);
if (!empty($out)){
$now = time();
$user = $row['id'];

$overallrank = $out['Overall']['rank'];
$overalllevel = $out['Overall']['level'];
$overallexp = $out['Overall']['xp'];
$overallpercent = ($overallexp / $overallexp) * 100;

$attackrank = $out['Attack']['rank'];
$attacklevel = $out['Attack']['level'];
$attackexp = $out['Attack']['xp'];
$attackpercent = ($attackexp / $overallexp) * 100;

$strengthrank = $out['Strength']['rank'];
$strengthlevel = $out['Strength']['level'];
$strengthexp = $out['Strength']['xp'];
$strengthpercent = ($strengthexp / $overallexp) * 100;

$defencerank = $out['Defence']['rank'];
$defencelevel = $out['Defence']['level'];
$defenceexp = $out['Defence']['xp'];
$defencepercent = ($defenceexp / $overallexp) * 100;

$hitpointsrank = $out['Hitpoints']['rank'];
$hitpointslevel = $out['Hitpoints']['level'];
$hitpointsexp = $out['Hitpoints']['xp'];
$hitpointspercent = ($hitpointsexp / $overallexp) * 100;

$rangedrank = $out['Ranged']['rank'];
$rangedlevel = $out['Ranged']['level'];
$rangedexp = $out['Ranged']['xp'];
$rangedpercent = ($rangedexp / $overallexp) * 100;

$prayerrank = $out['Prayer']['rank'];
$prayerlevel = $out['Prayer']['level'];
$prayerexp = $out['Prayer']['xp'];
$prayerpercent = ($prayerexp / $overallexp) * 100;

$magicrank = $out['Magic']['rank'];
$magiclevel = $out['Magic']['level'];
$magicexp = $out['Magic']['xp'];
$magicpercent = ($magicexp / $overallexp) * 100;

$cookingrank = $out['Cooking']['rank'];
$cookinglevel = $out['Cooking']['level'];
$cookingexp = $out['Cooking']['xp'];
$cookingpercent = ($cookingexp / $overallexp) * 100;

$woodcuttingrank = $out['Woodcutting']['rank'];
$woodcuttinglevel = $out['Woodcutting']['level'];
$woodcuttingexp = $out['Woodcutting']['xp'];
$woodcuttingpercent = ($woodcuttingexp / $overallexp) * 100;

$fletchingrank = $out['Fletching']['rank'];
$fletchinglevel = $out['Fletching']['level'];
$fletchingexp = $out['Fletching']['xp'];
$fletchingpercent = ($fletchingexp / $overallexp) * 100;

$fishingrank = $out['Fishing']['rank'];
$fishinglevel = $out['Fishing']['level'];
$fishingexp = $out['Fishing']['xp'];
$fishingpercent = ($fishingexp / $overallexp) * 100;

$firemakingrank = $out['Firemaking']['rank'];
$firemakinglevel = $out['Firemaking']['level'];
$firemakingexp = $out['Firemaking']['xp'];
$firemakingpercent = ($firemakingexp / $overallexp) * 100;

$craftingrank = $out['Crafting']['rank'];
$craftinglevel = $out['Crafting']['level'];
$craftingexp = $out['Crafting']['xp'];
$craftingpercent = ($craftingexp / $overallexp) * 100;

$smithingrank = $out['Smithing']['rank'];
$smithinglevel = $out['Smithing']['level'];
$smithingexp = $out['Smithing']['xp'];
$smithingpercent = ($smithingexp / $overallexp) * 100;

$miningrank = $out['Mining']['rank'];
$mininglevel = $out['Mining']['level'];
$miningexp = $out['Mining']['xp'];
$miningpercent = ($miningexp / $overallexp) * 100;

$herblorerank = $out['Herblore']['rank'];
$herblorelevel = $out['Herblore']['level'];
$herbloreexp = $out['Herblore']['xp'];
$herblorepercent = ($herbloreexp / $overallexp) * 100;

$agilityrank = $out['Agility']['rank'];
$agilitylevel = $out['Agility']['level'];
$agilityexp = $out['Agility']['xp'];
$agilitypercent = ($agilityexp / $overallexp) * 100;

$thievingrank = $out['Thieving']['rank'];
$thievinglevel = $out['Thieving']['level'];
$thievingexp = $out['Thieving']['xp'];
$thievingpercent = ($thievingexp / $overallexp) * 100;

$slayerrank = $out['Slayer']['rank'];
$slayerlevel = $out['Slayer']['level'];
$slayerexp = $out['Slayer']['xp'];
$slayerpercent = ($slayerexp / $overallexp) * 100;

$farmingrank = $out['Farming']['rank'];
$farminglevel = $out['Farming']['level'];
$farmingexp = $out['Farming']['xp'];
$farmingpercent = ($farmingexp / $overallexp) * 100;

$runecraftrank = $out['Runecraft']['rank'];
$runecraftlevel = $out['Runecraft']['level'];
$runecraftexp = $out['Runecraft']['xp'];
$runecraftpercent = ($runecraftexp / $overallexp) * 100;

$hunterrank = $out['Hunter']['rank'];
$hunterlevel = $out['Hunter']['level'];
$hunterexp = $out['Hunter']['xp'];
$hunterpercent = ($hunterexp / $overallexp) * 100;

$constructionrank = $out['Construction']['rank'];
$constructionlevel = $out['Construction']['level'];
$constructionexp = $out['Construction']['xp'];
$constructionpercent = ($constructionexp / $overallexp) * 100;

$summoningrank = $out['Summoning']['rank'];
$summoninglevel = $out['Summoning']['level'];
$summoningexp = $out['Summoning']['xp'];
$summoningpercent = ($summoningexp / $overallexp) * 100;
}
function combatLevel($attack, $defence, $strength, $hitpoints, $prayer, $ranged, $magic, $summoning) {
$base = ($defence + $hitpoints + floor($prayer / 2) + floor($summoning / 2)) * 0.25;

$melee = ($attack + $strength) * 0.325;
$ranger = floor($ranged * 1.5) * 0.325;
$mage = floor($magic * 1.5) * 0.325;

return $base + max($melee, $ranger, $mage);
}

mysql_query("INSERT INTO $tables (attack, defence, strength, hitpoints, ranged, prayer, magic, cooking, woodcutting, fletching, fishing, firemaking, crafting, smithing, mining, herblore, agility, thieving, slayer, farming, runecraft, hunter, construction, summoning)
VALUES ('$attackexp', '$defenceexp', '$strengthexp', '$hitpointsexp', '$rangedexp', '$magicexp', '$prayerexp', '$cookingexp', '$woodcuttingexp', '$fletchingexp', '$fishingexp', '$firemakingexp', '$craftingexp', '$smithingexp', '$miningexp', '$herbloreexp', '$agilityexp', '$thievingexp', '$slayerexp', '$farmingexp', '$runecraftexp', '$hunterexp', '$constructionexp', '$summoningexp')");

mysql_close();

Please don't let that put you off- it works fine. As you can see, where you see "$tables" is where the table name should be. I need to repeat all of that code for each instance of "$tables".

Problem: I don't know PHP well enough to use 'while' properly. I also think the complexity of that code may cause problems, what with all the curly brackets already there.

Thanks in advance, mrrsman

djr33
12-16-2009, 07:31 PM
I'm trying to understand what you want. You want to repeat the code inside the function for each part of the array $tables?
It is not possible to put a loop like that inside the function because the return statements will exit the function on the first loop through, but you can call the function itself for each part of the array.
When using arrays, foreach loops make everything easier. You can use while or for loops, but foreach is more automated.

Try this:
foreach($tables as $table) {
echo getStats($table);
}

Of course you should replace the echo with what you'd like to do with the results of the function.

Hope this gets you started.