[PHP] Tekst weergeven adhv de maand*

Pagina: 1
Acties:
  • 280 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben sinds kort begonnen met een boek PHP5 voor beginners.

Nu ben ik een eindje in het boek en met een simpel scriptje bezig
voor een klant waar ik niet helemaal uitkom. Ik heb het al aan
2 heren die wel wat meer van PHP weten als ik gevraagd maar deze
komen er niet uit, maar zeggen ook niet dat ik iets heel ergs verkeerd doe.

De bedoeling is dat hij kijkt welke datum het is, elke maand moet er een andere tekst
zichtbaar worden.

Kan iemand mij helpen door te zeggen wat ik fout doe en waarom ?
<?php

$tekst[01] = "tekst01";
$tekst[02] = "tekst02";

echo ($tekst[date ("m")]);

?>
dat is mijn code.

Alvast super bedankt

Acties:
  • 0 Henk 'm!

  • marko77
  • Registratie: Februari 2002
  • Laatst online: 06-05 19:41
moet $tekst[01]

niet $tekst[0] zijn?

voorloopnullen worden volgens mij niet gebruikt in arrays.

Mijn rig


Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

Hint: je haalt string en integers door elkaar.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
marko77 schreef op dinsdag 30 januari 2007 @ 13:50:
moet $tekst[01]

niet $tekst[0] zijn?

voorloopnullen worden volgens mij niet gebruikt in arrays.
volgens mijn boekje zou dit niet uit moeten maken

als ik ook gewoon

echo ($tekst[01]);

typ pakt hij wel tekst 1 en bij 02 tekst 2 dus dat werkt wel.
omdat date 01 t/m 12 geeft heb ik ze zo genoemd :)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
André schreef op dinsdag 30 januari 2007 @ 13:51:
Hint: je haalt string en integers door elkaar.
oke in mijn boek staat dat strings tekenreeksen zijn en integers getallen. In mijn onlogische denkwijze zou de code dan als onderstaande moeten zijn. Deze geeft alleen een foutmelding

Parse error: syntax error, unexpected T_STRING, expecting ']' in datumshow_test.php on line 15
<?php

$tekst[01] = "tekst01";
$tekst[02] = "tekst02";

echo ($tekst["date ("m")"]);

?>

Acties:
  • 0 Henk 'm!

  • André
  • Registratie: Maart 2002
  • Laatst online: 12-09 14:32

André

Analytics dude

PHP:
1
2
3
4
5
6
7
8
<?php

$tekst["01"] = "tekst01";
$tekst["02"] = "tekst02";

echo ($tekst[date ("m")]);

?>

Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

PHP:
1
2
3
4
5
6
7
8
<?php

$tekst[1] = "tekst01";
$tekst[2] = "tekst02";

echo ((int)$tekst[date ("n")]);

?>
Inclusief in PHP overbodige cast

Dat zou netter zijn, want in vrijwel alle talen is een sleutel in een array altijd een integer, en een integer mist de voorloopnullen.

[ Voor 8% gewijzigd door AtleX op 30-01-2007 14:07 ]

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
André schreef op dinsdag 30 januari 2007 @ 14:03:
PHP:
1
2
3
4
5
6
7
8
<?php

$tekst["01"] = "tekst01";
$tekst["02"] = "tekst02";

echo ($tekst[date ("m")]);

?>
super !!! ik ga het even beredeneren.
de functie date geeft geen integer af maar een string. daarom moete de getallen ["01"] tussen aanhalingtekens ? anders herkend hij ze niet ?

denk ik een beetje goed ?

Acties:
  • 0 Henk 'm!

  • truegrit
  • Registratie: Augustus 2004
  • Laatst online: 19-09 19:31
in php maakt dat bar weinig uit, dat word allemaal impliciet gecast naar hetzelfde type.
$tekst[1] zou hier waarschijnlijk ook werken

hallo


Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

PHP hoort bij de buren :) Had je hier overigens kunnen lezen ;)

Probeer in de toekomst ook een titel te verzinnen die de lading iets meer dekt... Anders zouden we een hoop PHP vraagjes hebben ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op dinsdag 30 januari 2007 @ 14:06:
[...]


super !!! ik ga het even beredeneren.
de functie date geeft geen integer af maar een string. daarom moete de getallen ["01"] tussen aanhalingtekens ? anders herkend hij ze niet ?
Klopt, in dit geval. Maar de oplossing die AtleX hierboven geeft is logischer. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
oke super bedankt allemaal :)

er zullen nog wel meer vragen van mij komen terwijl ik het boek doorwerk :)

zal rekening houden met de titel !!

thanks !

Acties:
  • 0 Henk 'm!

  • arieleks
  • Registratie: September 2002
  • Laatst online: 13-08-2013
AtleX schreef op dinsdag 30 januari 2007 @ 14:06:
PHP:
1
2
3
4
5
6
7
8
<?php

$tekst[1] = "tekst01";
$tekst[2] = "tekst02";

echo ((int)$tekst[date ("n")]);

?>
Inclusief in PHP overbodige cast

Dat zou netter zijn, want in vrijwel alle talen is een sleutel in een array altijd een integer, en een integer mist de voorloopnullen.
Je bedoelt:

PHP:
1
2
3
4
5
6
7
8
<?php

$tekst[1] = "tekst01";
$tekst[2] = "tekst02";

echo ($tekst[(int)date ("n")]);

?>


Anders geeft hij netjes de int waarde van "tekst01" terug = 0 ;)

[ Voor 5% gewijzigd door arieleks op 30-01-2007 14:17 ]

- Rietberg - sieben Mal sympatisch -

There are only 10 types of people, those who make stupid jokes about binary numbers and those who don't.


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Eh, moet die integer cast niet binnen de blokhaken staan?
edit:
Spuit 11

[ Voor 26% gewijzigd door hamsteg op 30-01-2007 14:22 ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
hamsteg schreef op dinsdag 30 januari 2007 @ 14:17:
[...]
Eh, moet die integer cast niet binnen de blokhaken staan?
edit:
Spuit 11
deze werkt inderdaad niet helemaal, geeft 0 weer ipv de tekst

zo werkt hij wel...:)
echo ($tekst[(int)date ("n")]);

[ Voor 13% gewijzigd door Verwijderd op 30-01-2007 14:20 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

arieleks schreef op dinsdag 30 januari 2007 @ 14:16:
[...]


Je bedoelt:

PHP:
1
2
3
4
5
6
7
8
<?php

$tekst[1] = "tekst01";
$tekst[2] = "tekst02";

echo ($tekst[(int)date ("n")]);

?>


Anders geeft hij netjes de int waarde van "tekst01" terug = 0 ;)
Ja, cast verkeerd gezet. :X

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • arieleks
  • Registratie: September 2002
  • Laatst online: 13-08-2013
AtleX schreef op dinsdag 30 januari 2007 @ 14:21:
[...]

Ja, cast verkeerd gezet. :X
offtopic:
Die cast is toch overbodig ;)

- Rietberg - sieben Mal sympatisch -

There are only 10 types of people, those who make stupid jokes about binary numbers and those who don't.


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

arieleks schreef op dinsdag 30 januari 2007 @ 14:31:
[...]

offtopic:
Die cast is toch overbodig ;)
Volgens mij is de cast wel nodig omdat de array index types integer en string beiden gebruikt mogen worden en PHP daar geen intepretatie over maakt. Zie ook: http://nl2.php.net/manual/en/ref.array.php#70688.

$a["1"] = 0;
$a[1] = 1;

Zijn beiden valid en PHP zal bij gebruik van date("n") echt niet een impliciete cast maken naar integer (dus eerst kijken wat er mogelijk gealloceerd is aan keys en daar een keuze in maken).

[ Voor 8% gewijzigd door hamsteg op 30-01-2007 14:41 . Reden: Verduidelijking ]

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • arieleks
  • Registratie: September 2002
  • Laatst online: 13-08-2013
hamsteg schreef op dinsdag 30 januari 2007 @ 14:38:
[...]

Volgens mij is de cast wel nodig omdat de array index types integer en string beiden gebruikt mogen worden en PHP daar geen intepretatie over maakt. Zie ook: http://nl2.php.net/manual/en/ref.array.php#70688.

$a["1"] = 0;
$a[1] = 1;

Zijn beiden valid en PHP zal bij gebruik van date("n") echt niet een impliciete cast maken naar integer (dus eerst kijken wat er mogelijk gealloceerd is aan keys en daar een keuze in maken).
Hmm,

PHP:
1
2
3
4
5
6
<?php
$tekst["1"] = "String";
$tekst[1] = "Integer";

echo ($tekst[date("n")]);
?>


geeft bij mij "Integer"

en

PHP:
1
2
3
4
5
6
<?php
$tekst[1] = "Integer";
$tekst["1"] = "String";

echo ($tekst[date("n")]);
?>


geeft "String".

Maar da's een beetje een open deur misschien. 8)7

[ Voor 3% gewijzigd door arieleks op 30-01-2007 14:52 ]

- Rietberg - sieben Mal sympatisch -

There are only 10 types of people, those who make stupid jokes about binary numbers and those who don't.


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

arieleks schreef op dinsdag 30 januari 2007 @ 14:47:Maar da's een beetje een open deur misschien. 8)7
Daar valt mij de b$k even van open ... :X Ik had echt twee maal String verwacht. Alleen het omdraaien levert een ander resultaat op? Cool.

... gecensureerd ...


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 16:14

pietje63

RTFM

Hmmm,logica van php?

Het lijkt er dus op dat hij elke integer omzet naar een string (lijkt mij iig logischer dan andersom). Maar toch als je

$tekst[] = "blaat";

gebruikt, dan zet hij er toch getalletjes in.. zullen die stiekem ook gewoon een string zijn :?

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!


Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Waarom is iedereen hier verbaasd over? Hallo, PHP is weak typed, en dit valt 100% binnen de logica van PHP in tal van vergelijkbare sitatuaties. De $array_var[] = 'nieuw element' constructie is gewoon een extra feature, waarbij het jou ook dus gewoon niet uitmaakt wat de key is (anders had je wel een key gedefinieerd).

Verder kan je ipv steeds allemaal array element assignments om draaien en kijken wat de waarde van 1 element is, ook gewoon print_r() gebruiken, ben je sneller klaar en weet je tenminste zeker dat je de gehele array ziet. :)

{signature}


Acties:
  • 0 Henk 'm!

  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 20-09 00:03

hamsteg

Species 5618

Voutloos schreef op woensdag 31 januari 2007 @ 08:13:Waarom is iedereen hier verbaasd over?
Ik weet het ... ik ben alleen uit het prehistorische 'C' tijdperk en moet daar nog steeds aan wennen. }:O

... gecensureerd ...


Acties:
  • 0 Henk 'm!

Verwijderd

php is weak-typed wat betekent dat een variable van type veranderd wanneer dat nodig is. date geeft een string terug en doordat jij in je array geen aanhalingstekens gebruikt en dus integers als key gebruikt wordt de key naar een string geconventeerd waarbij de 0 vervalt omdat deze nooit heeft bestaan. de key was immers een integer en integers beginnen NOOIT met een 0.

verder staat dit hele verhaal ook zeer duidelijk uitgelegd in de officiele documentatie op PHP.net.
zie dus: http://nl3.php.net/manual...e.types.string.conversion

@arieleks
dat is inderdaad verassend, maar ook wel logisch. lees maar eens op: http://nl3.php.net/manual/en/language.types.array.php

hier staat dat een string van "1" ge-interperteerd wordt als integer 1 terwijl een string van "01" geinterperteed wordt als een string "01". en aangezien er maar eenmaal de key 1 kan bestaan wordt de vorige key dus overschreven. waardoor dus de laaste waarde geldt.

kortom: perfect gedocumenteerd gedrag, alhoewel je het niet zou verwachten. ik moest het ook even weer doorlezen na al die jaren.
Pagina: 1