Array's vergelijken en verschillen tonen
Ik heb een klein score lijstje gemaakt voor een spelletje.
Iedere 5 sec wordt er een nieuwe lijst opgehaald met de scores van de personen. Deze worden in Array teruggegeven en uitgelezen.
Wat ik nu wil is de huidige scores vergelijken met de nieuwe ingeladen scores. Hierop wil ik de volledige lijst laten zien van nieuwe scores maar eveneens aangeven of een speler gestegen of gedaald is.
Ik weet dat ik array_diff kan gebruiken maar misschien heeft iemand een script of functie hiervoor liggen die dit allemaal voor mij regelt(A)
Bij voorbaat dank!
Toon eens een array zoals ze is, zoals ze geworden is en welk verschil je precies wil zien.
Ik heb geen code nodig, gewoon een voorbeeld van die ingevulde arrays
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<?php
$old_score = array('Kwik' => 34, 'Kwek' => 234, 'Jantje' => 46);
$new_score = array('Kwik' => 24, 'Kwek' => 325, 'Jantje' => 46);
function calculate_progress($player, $score, $old_score){
/*---- INFO! ---->
Als eerste gaan we controleren of we het over een nieuwe speler hebben JA of NEE.
*/
if(array_key_exists($player, $old_score)){
/*---- INFO! ---->
Nee, de speler is een oude bekende.
Dan gaan we nu controleren of de oude score is veranderd ten opzichte van de nieuwe JA of NEE.
*/
if($old_score[$player] != $score){
/*---- INFO! ---->
Ja, de speler heeft een andere score dan voorheen.
Dan gaan we nu controleren of de nieuwe score van de speler is gestegen of gedaald
ten opzichte van de oude score.
*/
return $score > $old_score[$player] ? 'Gestegen' : 'Gedaald' ;
}
else{
/*---- INFO! ---->
Nee, de speler heeft nog altijd dezelfde score.
*/
return 'Gelijk gebleven';
}
}
else{
/*---- INFO! ---->
Ja, we hebben te maken met een nieuwe speler.
*/
return 'Nieuwe speler';
}
}
foreach($new_score as $player => $score){
echo $player.' - '.$score.' / '.calculate_progress($player, $score, $old_score);
}
?>
$old_score = array('Kwik' => 34, 'Kwek' => 234, 'Jantje' => 46);
$new_score = array('Kwik' => 24, 'Kwek' => 325, 'Jantje' => 46);
function calculate_progress($player, $score, $old_score){
/*---- INFO! ---->
Als eerste gaan we controleren of we het over een nieuwe speler hebben JA of NEE.
*/
if(array_key_exists($player, $old_score)){
/*---- INFO! ---->
Nee, de speler is een oude bekende.
Dan gaan we nu controleren of de oude score is veranderd ten opzichte van de nieuwe JA of NEE.
*/
if($old_score[$player] != $score){
/*---- INFO! ---->
Ja, de speler heeft een andere score dan voorheen.
Dan gaan we nu controleren of de nieuwe score van de speler is gestegen of gedaald
ten opzichte van de oude score.
*/
return $score > $old_score[$player] ? 'Gestegen' : 'Gedaald' ;
}
else{
/*---- INFO! ---->
Nee, de speler heeft nog altijd dezelfde score.
*/
return 'Gelijk gebleven';
}
}
else{
/*---- INFO! ---->
Ja, we hebben te maken met een nieuwe speler.
*/
return 'Nieuwe speler';
}
}
foreach($new_score as $player => $score){
echo $player.' - '.$score.' / '.calculate_progress($player, $score, $old_score);
}
?>
Gewijzigd op 07/01/2011 11:01:22 door - Mark -
Dank jullie voor jullie input!
Ik heb die nacht dat ik het poste nog zelf wat geprobeerd. Ik werk OOP en in 3 lagen structuur. Ik wil daarom ook niet alle code posten maar kan wel de "core" laten zien. Wellicht dat men het in de toekomst nog eens kan gebruiken bij zijn denkwijze.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
try {
//Haal scores op van alle spelers, en geef terug als array
$arrScores = $scoreFunc->GetScoreSpelers();
//Start tabel
echo "<table width='100%'>";
//Bepaal positie
$teller = 0;
foreach($arrScores as $speler)
{
$tellerSession = 0;
//Vorige scores zijn opgeslagen in sessie en deze word nu uitgelezen
if(isset($_SESSION["arr_scores"])) {
foreach($_SESSION["arr_scores"] as $row) {
if($row["teamNaam"] == $speler["teamNaam"]) {
//Stop als team gevonden is
break;
}
$tellerSession++;
}
}
//Controle plaats, is gestegen of gedaald?
if($teller == $tellerSession) {
//Gelijk, dan niets doen
$key = " ";
} elseif($teller < $tellerSession) {
//Is gestegen, plaatje tonen
$key = "<img src='images/bullet_arrow_up.png' alt='' />";
} elseif($teller > $tellerSession) {
//Is gedaald, plaatje tonen
$key = "<img src='images/bullet_arrow_down.png' alt='' />";
} else {
//Onbekend...zou niet mogen, maar als wel gebeurd, dan maar leeg!
$key = " ";
}
//Tonen van een row in tabel
echo "<tr><td width='40px'>" . ($teller+1) . ".</td><td width='250px'>" . $speler["teamNaam"] . "</td><td width='180px'>" . $speler["score"] . "</td><td width='30px'>" . $key . "</td></tr>";
$teller++;
}
//Sluiten van tabel
echo "</table>";
//Huidige stand opslaan in sessie
$_SESSION["arr_scores"] = $arrScores;
//Genereer tijdelijk een score voor simulatie
$scoreFunc->randomUpdateScore();
} catch(ExceptionHandler $e) {
//Wanneer fout is opgetreden, netjes afhandelen in eigen Exception Class
echo $e->logError();
}
?>
try {
//Haal scores op van alle spelers, en geef terug als array
$arrScores = $scoreFunc->GetScoreSpelers();
//Start tabel
echo "<table width='100%'>";
//Bepaal positie
$teller = 0;
foreach($arrScores as $speler)
{
$tellerSession = 0;
//Vorige scores zijn opgeslagen in sessie en deze word nu uitgelezen
if(isset($_SESSION["arr_scores"])) {
foreach($_SESSION["arr_scores"] as $row) {
if($row["teamNaam"] == $speler["teamNaam"]) {
//Stop als team gevonden is
break;
}
$tellerSession++;
}
}
//Controle plaats, is gestegen of gedaald?
if($teller == $tellerSession) {
//Gelijk, dan niets doen
$key = " ";
} elseif($teller < $tellerSession) {
//Is gestegen, plaatje tonen
$key = "<img src='images/bullet_arrow_up.png' alt='' />";
} elseif($teller > $tellerSession) {
//Is gedaald, plaatje tonen
$key = "<img src='images/bullet_arrow_down.png' alt='' />";
} else {
//Onbekend...zou niet mogen, maar als wel gebeurd, dan maar leeg!
$key = " ";
}
//Tonen van een row in tabel
echo "<tr><td width='40px'>" . ($teller+1) . ".</td><td width='250px'>" . $speler["teamNaam"] . "</td><td width='180px'>" . $speler["score"] . "</td><td width='30px'>" . $key . "</td></tr>";
$teller++;
}
//Sluiten van tabel
echo "</table>";
//Huidige stand opslaan in sessie
$_SESSION["arr_scores"] = $arrScores;
//Genereer tijdelijk een score voor simulatie
$scoreFunc->randomUpdateScore();
} catch(ExceptionHandler $e) {
//Wanneer fout is opgetreden, netjes afhandelen in eigen Exception Class
echo $e->logError();
}
?>