Array allusers en id!

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Bas  van de Steeg

Bas van de Steeg

13/04/2012 13:57:38
Quote Anchor link
Beste mensen,

Ik was nooit echt bezig met arrays tot vandaag..
Vandaag had ik het nodig voor mijn cms.
Daarom vond ik het eigenlijk wel handig als ik goed snap hoe arrays werken en doen.
Hierdoor bedacht iets simpels te maken dacht ik....! Dat viel toch vies tegen. Ik had bedacht om een array "allusers" te maken en vervolgens een array "user" . Dit lukt nog wel. Maar nu heb ik een functie gemaakt "NewUser" deze functie doet dan het volgende:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?
function NewUser($username,$password,$session){

$id = $counter + 1;

$allusers = array($id);

$user = array($username,$password,$session);

echo ('User '.$user[0].' succesfully created!');

}

?>

Dit werkt al niet helemaal naar behoren. Het is namelijk de bedoeling dat wanneer ik NewUser('Bas','basvandesteeg','1'); doe. Dat de functie NewUser een user aan maakt in de array "user". En dat er een "id" in de array "allusers" word geschreven. Iemand een idee wat ik fout doe ?
Hier is mijn volledige code:
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
<?php
$counter
= 0;
$allusers = array();


function
NewUser($username,$password,$session){

$id = $counter + 1;

$allusers = array($id);

$user = array($username,$password,$session);

echo ('User '.$user[0].' succesfully created!');

}


NewUser('Stefan','basvandesteeg','1');
echo '<br />';

NewUser('Bas','basvandesteeg','1');
echo '<br />';

var_dump($allusers);
var_dump($user);
?>
 
PHP hulp

PHP hulp

28/12/2024 02:15:50
 
Stijn Ruiter

Stijn Ruiter

14/04/2012 11:44:46
Quote Anchor link
Er zitten een aantal foutjes in jou code.

Ten eerste moet je weten dat je als je een variabele wilt veranderen binnen een functie, dan moet je $GLOBALS["counter"] ipv $counter.
Ook worden alle variabelen die je binnen een functie maakt en gebruikt, aan het eind van de functie verwijderd. Daarom moet je aan het eind var_dump($user); niet meer gebruiken, aangezien $user niet bestaat.
Als laatste is er een fout in $allusers = array($id); Hierdoor zeg je steeds dat $allusers[0] = $id; Je kan dit beter doen door $allusers[$id] = $username;
Ook ben je vergeten dat je $counter altijd aan het eind van de functie moet optellen, anders blijft de $counter altijd 0.

Ik heb je code verbeterd. Hopelijk is dit wat je bedoelt.

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
<?php
$counter
= 0;
$allusers = array();

function
NewUser($username,$password,$session){
    //$id = $counter;
    $id = $GLOBALS["counter"];
    
//Manier 1
    //$allusers[$id] = $username;
    //$GLOBALS["allusers"][$id] = $username;
    //$user = array($username,$password,$session);
    //echo ('User '.$user[0].' succesfully created!');
    
//Manier 2, als je alle waardes in de allusers array wilt hebben

    $GLOBALS["allusers"][$id] = array($username,$password,$session);
    echo ('User '.$GLOBALS["allusers"][$id][0].' succesfully created!');
    
    //$counter++;
    $GLOBALS["counter"]++;
}


NewUser('Stefan','basvandesteeg','1');
echo '<br />';

NewUser('Bas','basvandesteeg','1');
echo '<br />';
var_dump($allusers);
//var_dump($user);
?>


Hopelijk lost dit je probleem op
 
Erwin H

Erwin H

14/04/2012 12:19:35
Quote Anchor link
Stijn Ruiter op 14/04/2012 11:44:46:
Ten eerste moet je weten dat je als je een variabele wilt veranderen binnen een functie, dan moet je $GLOBALS["counter"] ipv $counter.

Persoonlijk zou ik daar niet voor kiezen. Hoewel het wel zal werken, vind ik het beter om gewoon de variabelen mee te geven aan de functie, in plaats van globals te gebruiken.
Het gebruik van globals maakt je code namelijk in een keer afhankelijk van de context waarin het zich bevindt. Als je de functie morgen in een hele andere applicatie wilt gebruiken dan werkt het niet als je niet dezelfde global variabelen hebt. Ook kan je de functie direct niet meer gebruiken als je het opeens op een andere array wilt loslaten.

Mijn optie zou dus de volgende zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
function NewUser(&$allusers, &$count, $username,$password,$session){
    $allusers[$count] = array($username,$password,$session);
    echo ('User '.$allusers[$count][0].' succesfully created!');
    
    $count++
}

?>

Waarbij het ampersand teken (&) voor de variabelen betekent dat ze worden meegeven 'by reference'. Met andere woorden niet de waarde wordt meegegeven, maar een link naar het geheugen waar de waardes zich bevinden. Pas je nu de waarde aan in de functie, dan geldt die aanpassing ook nog daarbuiten.
 
Bas  van de Steeg

Bas van de Steeg

15/04/2012 19:27:06
Quote Anchor link
@ Erwin,Stijn bedankt voor jullie reactie. Ik ga er allebij nu naar kijken en ik denk dat ik er dan wel ga uitkomen. Bedankt ook voor jullie goeie uitleg :)
 



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.