Array's vergelijken en verschillen tonen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Wim E

Wim E

06/01/2011 20:42:09
Quote Anchor link
Beste,

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!
 
PHP hulp

PHP hulp

25/12/2024 16:18:24
 
Kris Peeters

Kris Peeters

07/01/2011 09:12:56
Quote Anchor link
Toon eens een voorbeeld.

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
 
- Mark -

- Mark -

07/01/2011 10:59:10
Quote Anchor link
Onderstaande is niet getest. Of de array's er zo uitzien is een gok.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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);
        }



?>
Gewijzigd op 07/01/2011 11:01:22 door - Mark -
 
Wim E

Wim E

10/01/2011 22:47:02
Quote Anchor link
Dag lui,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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 = "&nbsp;";
            }
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 = "&nbsp;";
            }

            //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();
    }

?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.