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"
);
?>
als je dubbelle aantal krijgt van ee nquery dan zit het daarin ja :P
maar moet ff kijken wat dat dan is ;)

edit:
<?php
$word_amount[] = $amount;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $amount)
{
array_push($word_amount, $amount);
echo $amount . "<br>";
?>
ik denk dat het hier in zit...
probeer t eens met :
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
foreach ($line as $amount)
{
array_push($word_amount, $amount);
echo $amount . "<br>";
?>
en dan
$word_amount=array();
boven je eerste loop zetten...
Zoals je misschien gezien hebt op de site ben ik ook gewend om een echo te doen op mijn SQL queries, zodat ik rechtstreeks op de database kan troubleshooten door daar de query uit te voeren.

Trucje:
<?php
if($localmode === true)
{
$adminqueries .=
"<br>SQL hoogste score van crimineel in categorie " . $table . ": " .
$sql_times_hangman . "<br>";
}
?>
Later in de standaard verwerking van mijn website lees ik $adminqueries uit met een echo naar de browser.
Momenteel heb ik $localmode hier in de code keihard op true gezegd (eerder in de code) zodat anderen de SQL ook kunnen zien.

Ik heb de query: SELECT COUNT( `best` ) FROM `hangman` WHERE `best` = 'PiCo'
... op de db losgelaten. Daar komt 1 resultaat terug.

In mijn code start ik op regel 61 een while-lus en op 63 een foreach. Ik zou dan denken dat dáár het dubbele werk wordt gedaan. Is er een methode om met slechts 1 lusconstructie de resultaten van een query met een array-push in een array te plaatsen?
Want als dat kan, dan zou ik verwachten dat hij deze maar 1x vult.
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
array_push($word_amount, $line);
echo $line . "<br>";
}
?>

had die while niet gezien, maar is overbodig 2 loops in elkaar, terwijl 1 genoeg is.
Koen, we zitten op het goede pad.
Ik heb deze aanpassing in mijn code doorgevoerd en op de site gezet.

De dubbele records in de array zijn weg.
Het enige wat hij nu wel nog steeds doet is de array verkeerd uitlezen.

Dit is wat jouw print_r($word_amount); nu oplevert:
Array ( [0] => [1] => Array ( [COUNT( `best` )] => 876 )

Nou zijn arrays nooit mijn sterkste kant geweest. Maar hoe lees ik nu het getal uit i.p.v. het gegeven 'Array'?
je array bevat de text "array(count(`best`) :S:S
vaag, dan zit er iets niet helemaal lekker in $word_amount

edit:
post nu nog eens het geneste loopje? naar huidige staat?
Ik heb het vermoeden dat dat op zich wel klopt. Die [COUNT( `best` )] is de naamgeving die PHP tijdens het parsen door de code aan de array heeft gegeven. Door mijn query te vervangen van
SELECT COUNT( `best` ) ....
... in ...
SELECT COUNT( `best` ) AS `occ` ....

... wordt nu [occ] als array-naam gegeven. We zitten dus te kijken naar een multidimensionale array. Dus als ik het getal wil uitlezen, zal ik dieper in de array moeten kruipen. Ik zal eens Googelen hoe je multidimensionale arrays uitleest.
een extra paar: []
daarmee lees je multidimensionale arrays uit.
Op aanvraag van Koen:

<?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());
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))
{
array_push($word_amount, $line);
echo $line . "<br>";
}
} // end foreach ($score_tables as $table)
print_r($word_amount);
?>

Extra [] plaatsen??

Zoals dit?

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

Edit: dat zal ik wel niet goed hebben gedaan, dan krijg ik deze error:
Fatal error: Cannot use [] for reading in /mnt/web8/51/01/51781401/htdocs/pages/wanted.php on line 86
die eerste [] moeten wel gevuld blijven
en waarom heb je nu
<?php
$word_amount[] = $amount;
while ($line = mysql_fetch_array($result, MYSQL_ASSOC))
{
?>
2x boven elkaar staan?
edit:
is al gefixed :P
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());
?>

Reageren