[PHP] Array functies problemen

Pagina: 1
Acties:
  • 556 views

Verwijderd

Topicstarter
Hallo tweakers.

Ik had 1 probleem met mijn php code.
Ik heb een code voor verjaardagen in mijn klas alleen het wil niet hele maal vlotten
Hij moet sorteren op datum, dat werkt gewoon.
Daarvoor moet hij dus boven aan neer zetten wie er jarig is.

code:
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
$aData = array(
    "Kylian"    => "1994-08-05",
    "Sjoerd"    => "1986-10-03",
    "Bryan"     => "1992-02-27",
    "Remco"     => "1993-09-17",
    "Rik"       => "1992-10-17",
    "Niels"     => "1992-04-13",
    "Anthony"   => "1992-02-29",
    "Janiev"    => "1991-12-09",
    "Tim"       => "1993-03-23",
    "Richard"   => "1992-09-17",
    "Lars"      => "1993-04-26",
    "Bert"      => "1991-07-16",
    "Lindsley"  => "1992-01-07",
    "Alistair"  => "1993-04-14",
    "Tom"       => "1992-10-27",
    "Collin"    => "1993-05-14",
    "Daniel"    => "1993-09-06",
    "Mast "     => "1960-01-22"
    );

$sDate = date('d-m-y');

$ArrayValues = array_values($aData);


foreach($ArrayValues as $key => $value){
    if($value == $sDate){
        $jarig = $key. "is vandaag jarig!<br>";
    }
}
            

if(!isset($jarig)){
        echo "";
}else{
    echo '<div style="font-size: 25px; font-weight: bold; font-color: red;">'.$jarig.' is vandaag jarig!<br/></div>';
}
asort($aData);

foreach ($aData as $sName => $sDate){
    echo $sName." is op ".$sDate." jarig<br/>";
}


Vandaag hebben we toevallig 2 personen die jarig zijn maar er komt niets te staan.
Blijkbaar is $jarig niet geset.
Iemand een idee wat ik fout doe
Ik weet het niet meer...
Alvast bedankt

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Voeg na regel 27 maar een regel toe:
PHP:
1
echo "Ik vergelijk $value met $sDate <br />\n";

  • harrald
  • Registratie: September 2005
  • Laatst online: 16-09 08:44
Verwijderd schreef op donderdag 17 september 2009 @ 10:18:
Hallo tweakers.

Ik had 1 probleem met mijn php code.
Ik heb een code voor verjaardagen in mijn klas alleen het wil niet hele maal vlotten
Hij moet sorteren op datum, dat werkt gewoon.
Daarvoor moet hij dus boven aan neer zetten wie er jarig is.


Vandaag hebben we toevallig 2 personen die jarig zijn maar er komt niets te staan.
Blijkbaar is $jarig niet geset.
Iemand een idee wat ik fout doe
Ik weet het niet meer...
Alvast bedankt
Het eerste wat me opvalt is je datum notatie: "1993-03-23" VS date('d-m-y').
De manier om dit soort dingen op te lossen is debuggen. succes! :)

[ Voor 53% gewijzigd door harrald op 17-09-2009 10:26 ]


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Je vergelijkt d-m-y met y-m-d (array values)...

If it isn't broken, fix it until it is..


  • Quadro!
  • Registratie: Maart 2004
  • Laatst online: 16:32
En doe na regel 27 ook maar eens een print $key;

  • Mr_x007
  • Registratie: Oktober 2001
  • Laatst online: 19:09
heeft het wel goed gewerkt? denk dat GlowMouse gelijk heeft en dat je 2 dingen die niet gelijk zijn probeert te vergelijken, als het wel werkt krijg je trouwens als resultaat $naam is vandaag jarig is vandaag jarig

  • mithras
  • Registratie: Maart 2003
  • Niet online
Tja, ook als er maar een iemand jarig is op een dag lijkt het me niet te gaan werken. De hint van GlowMouse moet je inderdaad aan het denken zetten :)

offtopic:
En stop met die lelijke VB notatie van variabelen. Imho nergens voor nodig ;)

Verwijderd

Topicstarter
ja heren, bedankt, ik had even pauze.
Maar ik zal eens kijken

@ harrald:
ja met d-m-y kon ik niet vergelijken op 1 of andere manier.
Ik zal eens kijken hoe of te wat.
Ik zal eens een d-m-y doen

Verwijderd

Topicstarter
Ik weet het al mensen
ik vergelijk de datum
d-m-Y met een geboorte datum
Ik moet er dus van maken:

d-m met d-m
Niet jaar, dat is altijd negatief.
Iemand een idee hoe ik dat de met mijn script?

huidige script:

code:
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
$aData = array(
    "Kylian"    => "05-08-1994",
    "Sjoerd"    => "03-10-1986",
    "Bryan"     => "27-02-1992",
    "Remco"     => "17-09-1993",
    "Rik"       => "10-17-1992",
    "Niels"     => "13-04-1992",
    "Anthony"   => "29-02-1992",
    "Janiev"    => "09-12-1991",
    "Tim"       => "23-03-1993",
    "Richard"   => "17-09-1992",
    "Lars"      => "26-04-1993",
    "Bert"      => "16-07-1991",
    "Lindsley"  => "07-01-1992",
    "Alistair"  => "14-04-1993",
    "Tom"       => "27-10-1992",
    "Collin"    => "14-05-1993",
    "Daniel"    => "06-09-1993",
    "Mast "     => "22-01-1960"
    );

$sDate = date('d-m-Y');

$ArrayValues = array_values($aData);


foreach($ArrayValues as $key => $value){
    echo "Ik vergelijk $value met $sDate <br />\n"; 
    if($value == $sDate){
        $jarig = $key. "is vandaag jarig!<br>";
    }
}
            

if(!isset($jarig)){
        echo "";
}else{
    echo '<div style="font-size: 25px; font-weight: bold; font-color: red;">'.$jarig.' is vandaag jarig!<br/></div>';
}
asort($aData);

foreach ($aData as $sName => $sDate){
    echo $sName." is op ".$sDate." jarig<br/>";
}

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Kijk eens naar substr, of sla je verjaardagen om te beginnen al anders op.

Verwijderd

Topicstarter
Dankje wel :D
Het werkt
soort van
ik wil de naam van persoon echoen
maar als ik de key ga echoen echt hij 9 is jarig
hoe kan ik voor de naam zorgen?

  • mithras
  • Registratie: Maart 2003
  • Niet online
Ik zou niet aan substr beginnen! Je zit dan heel erg aan je format gebonden. Misschien nu en hier niet zo heel erg, als je het wilt uitbreiden zit je er misschien aan vast. Als je met strtotime() de string omzet in een int timestamp, kan je daarna gemakkelijk vergelijken:
PHP:
1
2
3
4
5
foreach ($birthdays as $person => $birthday) {
  if (date('d') === date('d', $birthday) && date('m') === date('m', $birthday)) {
    $birthdayToday[] = $person;
  }
}

Verwijderd

Topicstarter
Mithras je script werkt niet

Hj geeft deze error:

Notice: A non well formed numeric value encountered

idee?

  • mithras
  • Registratie: Maart 2003
  • Niet online
Tja, het neigt nu een beetje naar bug fixing. Wat ik aangaf waren puur handvatten voor je om ermee verder te gaan.

Allereerst is de melding nutteloos zonder te weten op welke regel het slaat. Daarnaast moet je wel op de juiste manier de input van deze snippet klaarmaken. Heb je een array $birthdays met key/value paren waarbij de key de persoon is en de value de verjaardag van die persoon in Unix timestamps? Daarom wees ik je ook op de functie strtotime, waarbij je eenvoudig een string om kan zetten in een Unix timestamp. Je kan ook mktime gebruiken. Er zijn meer wegen die naar Rome leiden :)

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Verwijderd

Topicstarter
ja ik heb veranderd wat ik veranderd moest
het staat in de eerste regel na de foreach

dus

if (date('d') === date('d', $birthday) && date('m') === date('m', $birthday)) {

Verwijderd

Topicstarter
Maar dan nog: Hij echoed de de sleutel waarde dus bijvoorbeeld 9
Maar hij moet de naam echoen

Dit is de array:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$aData = array(
    "Kylian"    => "05-08-1994",
    "Sjoerd"    => "03-10-1986",
    "Bryan"     => "27-02-1992",
    "Remco"     => "17-09-1993",
    "Rik"       => "10-17-1992",
    "Niels"     => "13-04-1992",
    "Anthony"   => "29-02-1992",
    "Janiev"    => "09-12-1991",
    "Tim"       => "23-03-1993",
    "Richard"   => "17-09-1992",
    "Lars"      => "26-04-1993",
    "Bert"      => "16-07-1991",
    "Lindsley"  => "07-01-1992",
    "Alistair"  => "14-04-1993",
    "Tom"       => "27-10-1992",
    "Collin"    => "14-05-1993",
    "Daniel"    => "06-09-1993",
    "Mast "     => "22-01-1960"
    );

ideeën?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Een idee zou kunnen zijn dat je zijn hele post leest en begrijpt wat hij voorstelt ipv maar het stukje code te kopieren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • RMX
  • Registratie: Augustus 2000
  • Laatst online: 21:56

RMX

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
$aData = array(
    "Kylian"     => "1994-08-05",
    "Sjoerd"     => "1986-10-03",
    "Bryan"        => "1992-02-27",
    "Remco"        => "1993-09-17",
    "Rik"        => "1992-10-17",
    "Niels"        => "1992-04-13",
    "Anthony"    => "1992-02-29",
    "Janiev"    => "1991-12-09",
    "Tim"        => "1993-03-23",
    "Richard"    => "1992-09-17",
    "Lars"        => "1993-04-26",
    "Bert"        => "1991-07-16",
    "Lindsley"    => "1992-01-07",
    "Alistair"    => "1993-04-14",
    "Tom"        => "1992-10-27",
    "Collin"    => "1993-05-14",
    "Daniel"    => "1993-09-06",
    "Mast "        => "1960-01-22"
    );

$sDate = date('d-m-y');

//$ArrayValues = array_values($aData);

$jarig='';
foreach($aData as $key => $value){
    if($value == $sDate){
        $jarig .= $key. "is vandaag jarig!<br>";
    }
}
            

if(isset($jarig)){
    echo '<div style="font-size: 25px; font-weight: bold; font-color: red;">'.$jarig.' is vandaag jarig!<br/></div>';
}


Zoiets toch ?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

@RMX: Wat moet die code voorstellen? Dat is gewoon een copy paste van de startpost waarbij alleen een onnodige regel verwijderd is. Alle andere problemen zitten er nog gewoon in.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • MueR
  • Registratie: Januari 2004
  • Laatst online: 20:57

MueR

Admin Tweakers Discord

is niet lief

Verwijderd schreef op donderdag 17 september 2009 @ 11:40:
Maar dan nog: Hij echoed de de sleutel waarde dus bijvoorbeeld 9
Maar hij moet de naam echoen
Je snapt duidelijk arrays niet echt. In een associative array zoals je hier laat zien is het stuk voor de => je key. Wanneer je die weglaat zal PHP gaan autonummeren vanaf 0, anders respecteert zelfs PHP jouw opgegeven key.

Anyone who gets in between me and my morning coffee should be insecure.


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

NMe

Quia Ego Sic Dico.

Fakey, ik stel voor dat je nu eerst even de handleiding erbij pakt en uitgebreid gaat lezen hoe (associatieve) arrays werken, evenals de foreach constructie. Daarnaast natuurlijk de datumfuncties en het hoe en waarom van stringvergelijkingen. En daarnaast kun je wel een lesje in debuggen gebruiken. Het heeft verder geen zin voor jou of voor ons om je verder aan het handje te nemen; zolang je deze basisbeginselen niet beheerst zal elke vraag die wij voor je beantwoorden alleen maar meer vragen oproepen.

Dit topic gaat dan ook dicht.

'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.

Pagina: 1

Dit topic is gesloten.