Explode?
Ik ben bezig met een script waarvoor is niet belangrijk.
Maar ik moet 5 waardes in een database stoppen.
En het is nogal onhandig als ik 5 rijen moet aanmaken.
daarom wil ik het in 1 stoppen.
Nu heb ik wel eens van de functie explode gehoort maar weet niet of het hier de goede functie voor is.
Stel ik heb een veld.
0,34,23,65,45
Hoe kan ik bijv hier alle 5 de waardes er apart uithalen.
en dan zo echo'en
Veld1:0
veld2:34
veld3:23
enz
Maar ik moet 5 waardes in een database stoppen.
En het is nogal onhandig als ik 5 rijen moet aanmaken.
daarom wil ik het in 1 stoppen.
Nu heb ik wel eens van de functie explode gehoort maar weet niet of het hier de goede functie voor is.
Stel ik heb een veld.
0,34,23,65,45
Hoe kan ik bijv hier alle 5 de waardes er apart uithalen.
en dan zo echo'en
Veld1:0
veld2:34
veld3:23
enz
1). Gooi NOOIT meerdere waardes in een veld in de tabel! Een veld mag (officieel) maar een waarde bevatten. Als je meerdere waardes in een veld moet doen, is je database/tabel niet goed genoeg genormaliseerd en zul je je dat dus eerst moeten doen.
2). Explode zul je dan zo moeten gebruiken (zie ook explode() in de PHP.net documentatie):
2). Explode zul je dan zo moeten gebruiken (zie ook explode() in de PHP.net documentatie):
Ah oke dan toch maar wat informatie.
Ik ben bezig met een browsergame.
Gebouwen hebben 20 lvls.
Tabel.
CREATE TABLE IF NOT EXISTS `kosten` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`naam` varchar(32) NOT NULL,
`lvl1` varchar(255) NOT NULL,
`lvl2` varchar(255) NOT NULL,
`lvl3` varchar(255) NOT NULL,
`lvl4` varchar(255) NOT NULL,
enz enz
Anders moet ik meerdere tabel velden gaan aanmaken
`lvl1grondstof1` varchar(255) NOT NULL,
`lvl1grondstof2` varchar(255) NOT NULL,
`lvl1grondstof3` varchar(255) NOT NULL,
`lvl1grondstof4` varchar(255) NOT NULL,
`lvl1grondstof5` varchar(255) NOT NULL,
`lvl2grondstof1` enz enz
En dat leek mij dus niet handig.
Aangezien ik dan nog 80 velden moest aanmaken.
Dus u raad mij dit dus af?
Ik ben bezig met een browsergame.
Gebouwen hebben 20 lvls.
Tabel.
CREATE TABLE IF NOT EXISTS `kosten` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`naam` varchar(32) NOT NULL,
`lvl1` varchar(255) NOT NULL,
`lvl2` varchar(255) NOT NULL,
`lvl3` varchar(255) NOT NULL,
`lvl4` varchar(255) NOT NULL,
enz enz
Anders moet ik meerdere tabel velden gaan aanmaken
`lvl1grondstof1` varchar(255) NOT NULL,
`lvl1grondstof2` varchar(255) NOT NULL,
`lvl1grondstof3` varchar(255) NOT NULL,
`lvl1grondstof4` varchar(255) NOT NULL,
`lvl1grondstof5` varchar(255) NOT NULL,
`lvl2grondstof1` enz enz
En dat leek mij dus niet handig.
Aangezien ik dan nog 80 velden moest aanmaken.
Dus u raad mij dit dus af?
Gewijzigd op 01/01/1970 01:00:00 door Nigel
Gebruik int in plaats van varchar voor numerieke waarden. Ik weet niet hoe hoog een lvlgrondstof kan gaan maar ik neem aan tot honderd. int(3) is dan voldoende.
Ik snap je achterliggende gedachte niet. wat is het nut van deze informatie in je database?
Ik snap je achterliggende gedachte niet. wat is het nut van deze informatie in je database?
Gewijzigd op 01/01/1970 01:00:00 door - Mark -
Ik ga het denk ik toch met explode doen.
Heb net de functie doorgenomen.
En het werkt eigenlijk perfect.
Varchar gebruikte ik net omdat in de orginele tabel 44,44,44,44,44 kwam te staan. in INT kan dat niet.
En inderdaad. als ik het zo zou doen. is dit beter. `lvl1grondstof1` int(11) NOT NULL,
Het nut van deze informatie als bijv dat je weet waneer Hoe duur bijv een upgrade naar lvl 2.
Heb net de functie doorgenomen.
En het werkt eigenlijk perfect.
Varchar gebruikte ik net omdat in de orginele tabel 44,44,44,44,44 kwam te staan. in INT kan dat niet.
En inderdaad. als ik het zo zou doen. is dit beter. `lvl1grondstof1` int(11) NOT NULL,
Het nut van deze informatie als bijv dat je weet waneer Hoe duur bijv een upgrade naar lvl 2.
Nee, doe het niet met explode. Fix je datamodel. Hier ga je problemen mee krijgen.
stop die informatie dan in een gewone array. Het klinkt alsof hij voor iedereen hetzelfde is. het heeft dus volgens mij geen nut om deze informatie in je database te zetten.
Je kan het ook met PHP allemaal uitrekenen. Al die onzin met komma's en dergelijke is helemaal niet nodig.
Dus je gaat serieus voor elk level de grondstofkosten van een gebouw/unit/what ever in de tabel zetten??!?!
Doe het dan efficient:
idBuilding | grondstof 1 | grondstof 2 | grondstof 3 | grondstof 4
Dit is gewoon voor het basis-level. Vervolgens met een formule de overige levels DYNAMISCH berekenen, dus niet in de database opslaan. Je houdt alleen bij welk level het gebouw/unit/what ever op dit moment is en met de formule reken je automatisch de kosten uit. Als je slim bent gebruik je een exponentiele formule.
Doe het dan efficient:
idBuilding | grondstof 1 | grondstof 2 | grondstof 3 | grondstof 4
Dit is gewoon voor het basis-level. Vervolgens met een formule de overige levels DYNAMISCH berekenen, dus niet in de database opslaan. Je houdt alleen bij welk level het gebouw/unit/what ever op dit moment is en met de formule reken je automatisch de kosten uit. Als je slim bent gebruik je een exponentiele formule.
Agree @ hierboven: fix je datamodel, geen onnodige dingen opslaan, gewoon basis in php, en slechts paar dingetjes in database, en daarmee gaan rekenen.
Klopt wat jullie zeggen is inderdaad beter.
Zo blijft ook de database overzichtelijk.
Ik weet zo alleen niet hoe je het moet berekenen.
Iemand sugesties?
Zo blijft ook de database overzichtelijk.
Ik weet zo alleen niet hoe je het moet berekenen.
Iemand sugesties?
Ik neem aan dat je de waardes per level hebt? zoja post ze even dan hebben we een beter overzicht hoe je de kosten per gebouw wilt berekenen.
Laten we maar een simpele waarde pakken.
100
Ik heb nog niet echte waardes.
Maar het lijkt mij logisch om ze met 25% elke keer toe te laten nemen.
Kan ik altijd eventueel altijd veranderen.
Ik denk dat dit via loops werkt?
Ik zou het zo doen..
Maar dat is denk ik een beetje omslachtig?
$var1="100";
$var2=$var1*1,25;
$var3=$var2*1,25;
100
Ik heb nog niet echte waardes.
Maar het lijkt mij logisch om ze met 25% elke keer toe te laten nemen.
Kan ik altijd eventueel altijd veranderen.
Ik denk dat dit via loops werkt?
Ik zou het zo doen..
Maar dat is denk ik een beetje omslachtig?
$var1="100";
$var2=$var1*1,25;
$var3=$var2*1,25;
Gewijzigd op 01/01/1970 01:00:00 door Nigel
Ik heb het een beetje overdreven ben ik bang. Je sprong wat veel op en neer. Dit lijkt denk ik op wat je eerst in gedachte had. Het kan natuurlijk nog veel uitgebreider.
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
73
74
75
76
77
78
79
80
81
82
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
73
74
75
76
77
78
79
80
81
82
<?php
#| INFO: Stel je wilt een Level 1 huis bouwen.
$benodigde_grondstoffen = array(
'stenen' => array(
'hoeveelheid' => 1500,
'eenheid' => 'Stenen',
'kosten' => 50000
),
'beton' => array(
'hoeveelheid' => 2500,
'eenheid' => 'Kuub',
'kosten' => 6000
),
'hout' => array(
'hoeveelheid' => 350,
'eenheid' => 'Balken',
'kosten' => 10000
),
'dakpannen' => array(
'hoeveelheid' => 750,
'eenheid' => 'Stuks',
'kosten' => 15000
),
'glas' => array(
'hoeveelheid' => 50,
'eenheid' => 'Vierkante meter',
'kosten' => 12000
)
);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test.</title>
</head>
<body>
<?php
#| VOORBEELD:
$grondstoffen = array_keys($benodigde_grondstoffen);
for($i = 0; $i < 20; $i++)
{
#| Kosten array aanmaken
$kosten = array();
#| Level aangeven.
echo '<p style="font-size: 24px;"><b>Level:</b> '.($i + 1).'</p>';
#| Alle type grondstoffen afgaan.
foreach($grondstoffen as $value)
{
#| Kosten berekenen per type grondstof.
$kosten[$value] = $benodigde_grondstoffen[$value]['kosten'] * pow(1.25,$i);
echo '<p><b>Grondstof:</b> '.$value.'</p>';
echo '<p><b>Hoeveelheid:</b> '.number_format($benodigde_grondstoffen[$value]['hoeveelheid'] * pow(1.25,$i)).' '.$benodigde_grondstoffen[$value]['eenheid'].'<br />';
echo '<b>Kosten:</b> $ '.number_format($kosten[$value]).',-</p>';
}
#| Totale kosten per huis.
echo '<p><b>Totale kosten:</b> $ '.number_format(array_sum($kosten)).',-</p>';
}
?>
</body>
</html>
#| INFO: Stel je wilt een Level 1 huis bouwen.
$benodigde_grondstoffen = array(
'stenen' => array(
'hoeveelheid' => 1500,
'eenheid' => 'Stenen',
'kosten' => 50000
),
'beton' => array(
'hoeveelheid' => 2500,
'eenheid' => 'Kuub',
'kosten' => 6000
),
'hout' => array(
'hoeveelheid' => 350,
'eenheid' => 'Balken',
'kosten' => 10000
),
'dakpannen' => array(
'hoeveelheid' => 750,
'eenheid' => 'Stuks',
'kosten' => 15000
),
'glas' => array(
'hoeveelheid' => 50,
'eenheid' => 'Vierkante meter',
'kosten' => 12000
)
);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test.</title>
</head>
<body>
<?php
#| VOORBEELD:
$grondstoffen = array_keys($benodigde_grondstoffen);
for($i = 0; $i < 20; $i++)
{
#| Kosten array aanmaken
$kosten = array();
#| Level aangeven.
echo '<p style="font-size: 24px;"><b>Level:</b> '.($i + 1).'</p>';
#| Alle type grondstoffen afgaan.
foreach($grondstoffen as $value)
{
#| Kosten berekenen per type grondstof.
$kosten[$value] = $benodigde_grondstoffen[$value]['kosten'] * pow(1.25,$i);
echo '<p><b>Grondstof:</b> '.$value.'</p>';
echo '<p><b>Hoeveelheid:</b> '.number_format($benodigde_grondstoffen[$value]['hoeveelheid'] * pow(1.25,$i)).' '.$benodigde_grondstoffen[$value]['eenheid'].'<br />';
echo '<b>Kosten:</b> $ '.number_format($kosten[$value]).',-</p>';
}
#| Totale kosten per huis.
echo '<p><b>Totale kosten:</b> $ '.number_format(array_sum($kosten)).',-</p>';
}
?>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door - Mark -
Persoonlijk zou ik de gegevens die jij in $benodigde_grondstoffen zet juist WEL in de database stoppen.
Even bijwerken is dan ook direct veel gemakkelijker.
Maar dan wel met een heel ander datamodel.
grondstof1, grondstof2 etc is al overbodig... daarvoor heb je gewoon een koppeltabel nodig.
Even bijwerken is dan ook direct veel gemakkelijker.
Maar dan wel met een heel ander datamodel.
grondstof1, grondstof2 etc is al overbodig... daarvoor heb je gewoon een koppeltabel nodig.
Code (php)
Gewijzigd op 01/01/1970 01:00:00 door GaMer B
Dan vind ik dit laatste nog wel het makkelijkst:)




