[PHP] Getallen met 0'en ervoor, optellen voor array

Pagina: 1
Acties:

Onderwerpen


  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Ik wil graag een array vullen. Ik weet niet of het een multi_blabla_array is, maar ik wil em zo

$t[$j]_[$k]_[$l] = $variable;

Maar bij alle 3 de variablen komt er soms een 0 voor het getal.
Dus 01 of 02 en dat is geen probleem zolang het een string blijft,
maar als ik 01 + 01 doe, dan krijg ik 2. Dus $j++ bij 01 als beginpunt
werkt niet. Ik wil graag een for loopje gebruiken dus 9 keer onder elkaar
een regel zetten $j = "02"; , en dan weer die array code, en dan weer $j = "03";
dat werkt ook niet.

Zo'n engelse benaming die misschien van pas kan komen: "leading zero's"
Ik weet niet waar ik moet zoeken bij zoiets....
Misschien dat jullie weten hoe dit zit

Verder weet ik niet of dit wel mag:
$t[$j]_[$k]_[$l] = $variable;

en dan benadruk ik de _ tussen de array [$%] getallen in.

[ Voor 13% gewijzigd door Cheater op 19-12-2002 22:51 ]


  • sjroorda
  • Registratie: December 2001
  • Laatst online: 15:28
om met je laatste vraag te beginnen: mag niet. Als je de underscores weghaalt gaat alles goed, wat 3d-array betreft.

Dan een vraag van mijn kant: waarom verkies jij [01] boven [1]?

Antwoord op je eerste vraag: doe gewoon ++, en zet er daarna eventueel een 0 voor, hiervoor kan je zelf een functie schrijven of wellicht heeft PHP zoiets wel in huis (weet ik niet uit mijn hoofd, moet je even zoeken)

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

snap niet echt wat je bedoelt.. maar je kunt er een int van casten:

(int) $j;

bijvoorbeeld.. en anders als je het als associative array opslaat (met strings dus als indices) kun je gewoon een foreach() loopje gebruiken.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
sjroorda schreef op 19 December 2002 @ 22:53:
om met je laatste vraag te beginnen: mag niet. Als je de underscores weghaalt gaat alles goed, wat 3d-array betreft.

Dan een vraag van mijn kant: waarom verkies jij [01] boven [1]?

Antwoord op je eerste vraag: doe gewoon ++, en zet er daarna eventueel een 0 voor, hiervoor kan je zelf een functie schrijven of wellicht heeft PHP zoiets wel in huis (weet ik niet uit mijn hoofd, moet je even zoeken)
De getallen van de array geven aan waar ze op terugslaan. Ik krijg straks dan 360 variablen in een 3d array. Deze moeten in een grafiek weer terugkomen.
Natuurlijk KAN ik [1] pakken maar als ik $j = 1 heb, dan wil ik die ook graag gebruiken voor een bepaalde if regel waar ik 01 nodig heb. Een 0 ervoor plakken vind ik niet zo origineel, dan moet ik daar weer een if regel voor maken want alleen de getallen onder de 10 moeten een 0 ervoor

[ Voor 255% gewijzigd door Cheater op 22-12-2002 04:13 ]


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

zo kan je een 0 ervoor plakken:
PHP:
1
$nummer = str_pad($nummer, 2, '0', STR_PAD_LEFT);


str_pad()

[ Voor 6% gewijzigd door thomaske op 20-12-2002 09:59 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Cheater schreef op 20 December 2002 @ 09:44:
[...]


De getallen van de array geven aan waar ze op terugslaan. Ik krijg straks dan 360 variablen in een 3d array. Deze moeten in een grafiek weer terugkomen.
Natuurlijk KAN ik [1] pakken maar als ik $j = 1 heb, dan wil ik die ook graag gebruiken voor een bepaalde if regel waar ik 01 nodig heb. Een 0 ervoor plakken vind ik niet zo origineel, dan moet ik daar weer een if regel voor maken want alleen de getallen onder de 10 moeten een 0 ervoor


Dan snap ik niet waarom je met stringrepresentaties van integers gaat lopen werken? Waarom "01" als je er gewoon een integer van kan maken...

Je gaat nu voor een 1 een 0 plakken, terwijl je veel makkelijker (en netter) de 0 weg kan halen voor de 1 die hem wel heeft.. :?

Ben ik nu gek?

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while ( list ( $tijd, $login, ) = mysql_fetch_row ( $gettijdresult ) )
{
    $tijd1 = date("H", $tijd); // uur
    $tijd2 = date("j", $tijd); // dag
    for ($i = 0; $i < 31; $i++) { 
        $k = 0;
        $l = 1;
        if ($k < 10) { $k = str_pad($k, 2, '0', STR_PAD_LEFT); }
        if ($l < 10) { $l = str_pad($l, 2, '0', STR_PAD_LEFT); }
        for ($j = 0; $j < 12; $j++) { 
            if ($i < 10) { $i = str_pad($i, 2, '0', STR_PAD_LEFT); }
            if (!is_numeric($t[$i][$k][$l])) { $t[$i][$k][$l] = 0; }
            if (($tijd2 == $i) && ($tijd1 >= $k) && ($tijd1 <= $l)) { $t[$i][$k][$l] = "red"; }
            $k = $k + 2;
            $l = $l + 2;
            if ($k < 10) { $k = str_pad($k, 2, '0', STR_PAD_LEFT); }
            if ($l < 10) { $l = str_pad($l, 2, '0', STR_PAD_LEFT); } 
        } 
    }
}


Ik heb het nu zo gedaan,
Hoe kan ik de variablen nu op het scherm afdrukken door middel van 'echo' en niet 'print' of 'print_r'.
Ook heb ik wat topics gezien iets met eval... en dat het vies was enzo...

Ik weet bijvoorbeeld dat $t[14][02][03] gevuld is met de waarde 'red' en dat wil ik even controleren, maar hoe doe ik dat.

[ Voor 15% gewijzigd door Cheater op 21-12-2002 02:09 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

*gaap* ik geef het op.. mijn replies worden stelselmatig genegeerd.. en je blijft onwillig te vertellen waarom je deze belachelijke code zou willen schrijven..

Het laatste voorbeeld dat je schrijft is al helemaal lachwekkend.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
LOL ;) sfeermaker

Je ziet dat ik bijvoorbeeld de variable l gebruik voor de array als zowel in de IF regel.
Daarom wil ik een 0 ervoor.

Acties:
  • 0 Henk 'm!

Verwijderd

Cheater schreef op 21 December 2002 @ 16:39:
LOL ;) sfeermaker

Je ziet dat ik bijvoorbeeld de variable l gebruik voor de array als zowel in de IF regel.
Daarom wil ik een 0 ervoor.

Dit maakt het niet meer logisch hoor, ik snap nog steeds niet waarom je die nullen overal voor wilt.

Waarom zeg je niet gewoon wát je wilt dat er gebeurt, in plaats van hoe.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Ik wil dadelijk de intensiteit berekenen van het aantal bezoekers binnen tijdseenheden van 2 uur. En dat gemeten over 31 dagen.

Nu staat er dus nog $t[$i][$k][$l] = "red";
maar dat wordt dadelijk $t[$i][$k][$l]++; Mits dit kan natuurlijk

[ Voor 32% gewijzigd door Cheater op 21-12-2002 16:45 ]


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Cheater schreef op 21 December 2002 @ 16:43:
Ik wil dadelijk de intensiteit berekenen van het aantal bezoekers binnen tijdseenheden van 2 uur. En dat gemeten over 31 dagen.

Nu staat er dus nog $t[$i][$k][$l] = "red";
maar dat wordt dadelijk $t[$i][$k][$l]++; Mits dit kan natuurlijk

Ja, dat kan en waarom moet de 0 ervoor staan :?

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Misschien moet ik een simpel voorbeeld aanhalen:

$var = 5;
$arr[$var] = $var;

Je ziet dat ik de variable $var 2 keer gebruik voor verschillende doeleinden.
Nu heb ik geen waarde 5 nodig, maar 05 voor de array. En ik wil graag de array ook zo benoemen.

Acties:
  • 0 Henk 'm!

  • Cruz
  • Registratie: November 1999
  • Laatst online: 03-09 16:35
Cheater schreef op 21 december 2002 @ 21:07:
Misschien moet ik een simpel voorbeeld aanhalen:

$var = 5;
$arr[$var] = $var;

Je ziet dat ik de variable $var 2 keer gebruik voor verschillende doeleinden.
Nu heb ik geen waarde 5 nodig, maar 05 voor de array. En ik wil graag de array ook zo benoemen.
Je doet net alsof het voor de array verplicht is om een leading zero te hebben?
$arr[5] is precies hetzelfde als $arr[05] volgens mij hoor.

Acties:
  • 0 Henk 'm!

  • Cruz
  • Registratie: November 1999
  • Laatst online: 03-09 16:35
Aha. Ik lees net effe precies wat je wil doen, en in de PHP help van de 'date' functie staat:
j - day of the month without leading zeros; i.e. "1" to "31"
G - hour, 24-hour format without leading zeros; i.e. "0" to "23"
Dus als je de H in een G veranderd, heb je helemaal geen last van leading zeroes.

Hoef je ook niet liggen te kutten ;)

[ Voor 21% gewijzigd door Cruz op 21-12-2002 21:32 ]


Acties:
  • 0 Henk 'm!

  • _-= Erikje =-_
  • Registratie: Maart 2000
  • Laatst online: 15-09 14:23
Mag ik even vragen waarom je fetchrow gebruikt? die zijn mateloos irritant als je later in je database een kolom tussenvoegt.
PHP:
1
2
$var = 5;
$arr[$var] = $var;

Verder zie ik het nut ook niet echt in om de index van een array gelijk te stellen aan de inhoud van die index.
Je krijgt hier een array $arr[5]=5; maw, je moet al de waarde weten in het array als je de inhoud ervan wilt opvragen met de index.
multi_blabla_array
multi dimensionaal array ? :)

Maar in het stuk code wat je gepost bent ben je niet eens met een array bezig maar gewoon met een variabele die je met nummertjes benoemd?
PHP:
1
$t01_00_01 = "red";

als je "red" in het array wilt stoppen op 01 00 01 moet je $t[1][0][1] gebruiken.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
als je "red" in het array wilt stoppen op 01 00 01 moet je $t[1][0][1] gebruiken.
Is dit werkelijk zo???

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier


Test het toch es dan...
print_r en var_dump zijn je vrienden als je wilt weten hoe een array eruit ziet....

Er is trouwens nog steeds geen reden waarom je de leading 0 zou willen hebben hoor...

[ Voor 16% gewijzigd door ACM op 22-12-2002 01:13 ]


Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Cruz schreef op 21 december 2002 @ 21:30:
j - day of the month without leading zeros; i.e. "1" to "31"
G - hour, 24-hour format without leading zeros; i.e. "0" to "23"

Dus als je de H in een G veranderd, heb je helemaal geen last van leading zeroes.
Ik denk dat ik dit maar ga doen, ik had er zelf ook al aan gedacht, maarja, dan hoef ik die leading zero's niet meer te gebruiken, en niet iedereen begrijpt waarom ik ze gebruik

[ Voor 74% gewijzigd door Cheater op 22-12-2002 02:54 ]


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

en niet iedereen begrijpt waarom ik ze gebruik
dat heeft ook te maken met het feit dat je nog steeds niet uitgelegd hebt waarom je ze gebruikt...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
OK. het werkt nu volledig.

Hieronder de 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
             <?
            $month = date("t"); // maximaal aantal dagen in huidige maand
            $month1 = $month * 12;
            $date2 = date("Y-m-01 00:00:00");
            $gettijdquery = "SELECT UNIX_TIMESTAMP(tijd),login FROM visits WHERE tijd > '$date2' ORDER BY tijd";
            $gettijdresult = mysql_query ( $gettijdquery );
            $themax = 0;
            while ( list ( $tijd, $login, ) = mysql_fetch_row ( $gettijdresult ) )
            {
                $tijd1 = date("G", $tijd); // uur
                $tijd2 = date("j", $tijd); // dag
                for ($i = 0; $i < 31; $i++) { 
                    $k = 0;
                    $l = 1;
                    for ($j = 0; $j < 12; $j++) { 
                        if (!is_numeric($t[$i][$k][$l])) { $t[$i][$k][$l] = 0; }
                        if (($tijd2 == $i) && ($tijd1 >= $k) && ($tijd1 <= $l)) { $t[$i][$k][$l]++; }
                        $max = $t[$i][$k][$l];
                        if ($themax < $max) { $themax = $max; }
                        $k = $k + 2;
                        $l = $l + 2;
                    } 
                }
            }
            $themax_99 = $themax / 100;
            $themax_100 = $themax;
            ?>
            <font face="Verdana, Arial" color="#F3EFCD">
            <table width="<?= $month1 ?>" border="0" cellpadding="0" cellspacing="0" align="center" bgcolor="white">
            <?
            for ($g = 0; $g < 100; $g++) { 
                ?><tr><?
                for ($i = 0; $i < $month; $i++) { 
                    $k = 0;
                    $l = 1;
                    for ($j = 0; $j < 12; $j++) 
                        { 
                        $arr = $t[$i][$k][$l];
                        if ($arr <= $themax_100) {
                            ?><td width="1" height="1" bgcolor="white"></td><?
                        } else {
                            ?><td width="1" height="1" bgcolor="red"></td><?
                        }
                        $k = $k + 2;
                        $l = $l + 2; 
                        }
                }
                ?></tr><?
                $themax_100 = $themax_100 - $themax_99;
            }
            ?>
            </table>


Maar als je op http://www.clan-league.com/index.php?w=Statistics
kijkt dan zie je de pagina heel sloom laden, komt dit door de tabel of alle for loopjes of iets anders, en wat zou er aan te doen kunnen zijn?

[ Voor 13% gewijzigd door Cheater op 22-12-2002 04:14 ]


Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Kan ik niet beter in plaats van een 36000 cellen tellende tabel afbeeldingen van 1 bij 1 pixels neerzetten ?
Of misschien 100 afbeeldingen maken van 100 pixel hoog, en 1 pixel breed, en dat elke afbeelding 1 rode pixel meer in de hoogte heeft dan de vorige. Dan hoef ik maar 360 afbeeldingen te laden in het geval wanneer alle aantallen van aantal bezoekers in die maand voorkomen.

Acties:
  • 0 Henk 'm!

Verwijderd

Kijk anders eens naar de GD library. Zie ook je PHP manual.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Ik heb nu dit erbij gemaakt:
http://www.clan-league.com/index.php?w=Statistics

Ik vind hem mooier en laadt een stuk beter, vinden jullie deze ook niet beter?

[ Voor 6% gewijzigd door Cheater op 22-12-2002 16:30 ]


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Heb je er wel eens aan gedacht dat je gewoon 1 gifje kan nemen voor een balk en daarvan de breedte en hoogte neer kan zetten, ipv de balk op te bouwen uit duidenden tabellen/pixels??

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Kijk DAT is nou net iets waar ik even niet aan dacht.
Ik had het zelf kunnen verzinnen maar ik zat te denken aan gifjes van 1 pixel hoogte en 12 breed. Maar dat hoeft niet nu je deze TIP geeft.

Tnx.

Acties:
  • 0 Henk 'm!

  • Cheater
  • Registratie: Januari 2001
  • Laatst online: 13:39
Bosmonster schreef op 23 December 2002 @ 11:27:
Heb je er wel eens aan gedacht dat je gewoon 1 gifje kan nemen voor een balk en daarvan de breedte en hoogte neer kan zetten, ipv de balk op te bouwen uit duidenden tabellen/pixels??
Ik heb meteen je tip doorgevoerd, en kijk het resultaat:
http://www.clan-league.com/index.php?w=Statistics

100 keer zo snel. Het enige probleem is nu het aangeven van het aantal ingelogde gebruikers
Pagina: 1