LS,

Voor een nieuwe versie van mijn scorelijst op mijn hangman spel wil ik met drie arrays tegelijk werken om
1. vanuit de $score_tables - array een tabelnaam op te halen waarmee ik met een SELECT in de database de hoogste scores zal ophalen.
De gebruiker zal deze naam niet in het scherm zien.
2. vanuit de $categories - array de categorienaam van een tabel op te halen om aan de gebruiker te tonen.
3. de $word_amount[] - array met behulp van de uitkomst van de query te vullen.

Uiteindelijk moet de tabel die op het scherm getoond moet worden er zo uitzien:

[m.b.v. $categories] || [m.b.v. $word_amount]
UIT DE TYCOON NEWSPAPER || 876
CONTAMINATIES || 57
ONBESTAANDE BEROEPEN || 122
LEUK WOORD VOOR GALGJE -MOEILIJK- || 104
etc.

In plaats daarvan wordt het volgende getoond, op basis van de huidige code die ik nu heb:
[m.b.v. $categories] || [m.b.v. $word_amount]
UIT DE TYCOON NEWSPAPER || 876
CONTAMINATIES || 876
ONBESTAANDE BEROEPEN || 57
LEUK WOORD VOOR GALGJE -MOEILIJK- || 57
etc.

Probleem waar het op stuk loopt:
Variable $iSize telt de inhoud van de array $word_amount 2x!
Zou array $word_amount 14 records bevatten, dan wordt $iSize op 28 gezet, etc.

Eigen poging om het op te lossen staat in de code onder '// Mijn poging'.
Maar levert als resultaat dat er inderdaad de helft zoveel regels wordt afgedrukt, maar nog altijd met opeenvolgend elke waarde uit $word_amount 2x.

Hieronder mijn code en daaronder de url naar de betreffende live-pagina. Mocht er nog meer info wenselijk zijn dan hoor ik het graag.

<?php
// ****************************************************************************************
// GET SCORE PER CATEGORY FOR THIS CRIMINAL *
// ****************************************************************************************
// Per categorie de score ophalen van deze crimineel
// ****************************************************************************************
foreach ($score_tables as $table)
{
$sql_times_hangman = "SELECT COUNT( `best` ) FROM `$table` WHERE `best` = '$criminal'";
$result = mysql_query($sql_times_hangman) or die(mysql_error());
if($localmode === true)
{
$adminqueries .=
"<br>SQL hoogste score van crimineel in categorie " . $table . ": " .
$sql_times_hangman . "<br>";
}

$word_amount[] = $amount;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $amount)
{
array_push($word_amount, $amount);
echo $amount . "<br>";
}
}
}

// ****************************************************************************************
// SHOW COLUMS WITH SCORE DETAILS *
// ****************************************************************************************
// Weergave van score
// ****************************************************************************************

$iSize = count($word_amount) >= count($categories) ? count($word_amount) : count($categories);

// Mijn poging :
// $iSize = ($iSize / 2);

for ($i = 0; $i < $iSize; $i++)
{
echo
'<tr><td>'.(isset($categories[$i]) ? $categories[$i] : '&nbsp;').'</td>
<td>'.(isset($word_amount[$i]) ? $word_amount[$i] : '&nbsp;').'</td></tr>';
}


// ****************************************************************************************
?>

URL: http://www.wsnoi.com/index.php?page=oldhangman

Vast bedankt voor het meedenken!

Groeten,

Gsorsnoi

Toevoeging de twee arrays $score_tables & $categories:

<?php
// ****************************************************************************************
// CREATE SCORE TABLES ARRAY *
// ****************************************************************************************

$score_tables = array(

1 => "hangman",
2 => "hang_contaminaties",
3 => "hang_onbest_beroep",
4 => "hang_leuk_hard",
5 => "hang_marten_toonder",
6 => "hang_medisch",
7 => "hang_nost_kindertv",
8 => "hangman_pokemon",
9 => "hang_geletrui",
10 => "hang_basket",
11 => "hang_emoties",
12 => "hang_wii",
13 => "hang_auto",
14 => "hang_overdebijbel"
);
// ****************************************************************************************
// CREATE AVAILABLE CATEGORY ARRAY *
// ****************************************************************************************
$categories = array(

1 => "UIT DE TYCOON NEWSPAPER",
2 => "CONTAMINATIES",
3 => "ONBESTAANDE BEROEPEN",
4 => "LEUK WOORD VOOR GALGJE -MOEILIJK-",
5 => "MARTEN TOONDER",
6 => "MEDISCHE WERELD",
7 => "NOSTALGISCHE KINDER TV",
8 => "POKEMON",
9 => "GELE TRUIDRAGERS",
10 => "NBA BASKETBALLSPELERS",
11 => "EMOTIONELE TOESTANDEN",
12 => "WII GAMES",
13 => "AUTOMERKEN",
14 => "OVER DE BIJBEL"
);
?>
De tweede opmerking over het dubbel voorkomen van een code fragment heb ik begrepen. Is vast fout gegaan in het koppieren en plakken. Heb ik nu aangepast in deze topic.

De eerste opmerking ... is dit wat je bedoeld? >>

<?php
<td>'.(isset($word_amount[$i][$i]) ? $word_amount[$i] : '&nbsp;').'</td></tr>';
?>

Ga ik testen!
daar krijg je niet de juiste records mee...
en @ santhe:
hij moet 14 records krijgen.

dan zul je nog een loopje moeten nesten
om die tweede array door te lopen, gebruik dan een andere vaariabele om mee te loopen.
SanThe schreef op 17.11.2009 16:04
Hoeveel records levert deze query op?
<?php
$sql_times_hangman = "SELECT COUNT( `best` ) AS `occ` FROM `$table` WHERE `best` = '$criminal'";
$result = mysql_query($sql_times_hangman) or die(mysql_error());
?>


Dat is precies afhankelijk van welke $table er vanuit ...

<?php
foreach ($score_tables as $table)
{
?>
... komt.

De eerste drie queries resulteren:
($table = 'hangman') >> 876
($table = 'hang_contaminaties') >> 57
($table = 'hang_onbest_beroep') >> 122
<?php
for ($i = 0; $i <= ($iSize/2); $i++)
{
echo
'<tr><td>'.(isset($categories[$i]) ? $categories[$i] : '&nbsp;').'</td>';
for($j=0; $j<=(count($categories)); $j++)
{
echo '<td>'.(isset($word_amount[$i][$j])? $word_amount[$i][$j]:'&nbsp;').'</td></tr>';
}
}
?>
@ Koen.
Je was me voor met de code. Bedankt voor het meeprogrammeren.

Ik heb de aanpassing overgenomen zoals in je laaste comment staat. Maar de resultaten in de browser zijn wel heel apart nu.
Dat omschrijven is een beetje lastig. Misschien wil je deze op de site zelf bekijken. De aangepaste code staat live.

mooi gedaan...
alleen dat plaatje van die voeten neemt wel erg de center stage in ;)
Ja die footer bedoel je waarschijnlijk. Dat is enkel een stukje layout van de website. Maar dat valt buiten dit topic.

Dank je voor het compliment. Ik moet nog even wat stoeien met die loops, want we hebben nog altijd de juiste gegevens niet in de goede kolom staan.

Waarschijnlijk kijk ik daar morgenochtend op z'n vroegst weer naar. Erg bedankt voor het meedenken. We zijn al erg ver gekomen zo samen.

Groeten,

Gsorsnoi
Gsorsnoi schreef op 17.11.2009 16:14

De eerste drie queries resulteren:
($table = 'hangman') >> 876
($table = 'hang_contaminaties') >> 57
($table = 'hang_onbest_beroep') >> 122

Dus elke query geeft 1 record terug. Dat klopt. Dus heb je geen while() nodig en zeker niet nog een while() in de eerste while() want die tweede zal nooit lopen.
@ SanThe:
Gokje, in plaats van een while() moet ik dan een foreach() inbouwen bij het doorlopen van de resultaten die de query ophaalt?

Ga ik morgenochtend even mee spelen! Ik ga nu afsluiten.

Groeten,

Gsorsnoi

Bij 1 record helemaal niks wat op een loop lijkt. Gewoon ophalen meer niet.

<?php
foreach ($score_tables as $table)
{
$sql_times_hangman = "SELECT COUNT( `best` ) AS `occ` FROM `$table` WHERE `best` = '$criminal'";
$result = mysql_query($sql_times_hangman) or die(mysql_error());

$line = mysql_fetch_array($result, MYSQL_ASSOC);

// en hier doe je wat je wilt met het array() $line.
} // end foreach ($score_tables as $table)
?>

Reageren