Array allusers en id!
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)
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)
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
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);
?>
$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);
?>
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)
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
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);
?>
$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
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)
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.
@ 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 :)