PHP periodiek

Pagina: 1
Acties:

Onderwerpen

Vraag


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi allen,

Ik heb een vraag: Ik wil graag dat een zin wordt weergegeven wanneer het weeknummer 2, 6, 10, 14, 18, 22, 26 etc. is (2 + 4x). Het lukt me alleen niet.

Tot nu toe heb ik dit:

<?php

$currentWeekNumber = date('W');
echo 'Weeknummer:' . $currentWeekNumber;

if ($currentWeekNumber == (2 + 4))

{
echo "<mark>Ook de maandbaxters zijn aan de beurt.</mark>";
}


Ik weet dat de computer nu alleen de zin weergeeft als we in weeknummer 6 zitten. Weet iemand hoe ik dit oplos?

Alvast bedankt voor je tijd en moeite!

Groeten Dorien998

Alle reacties


Acties:
  • +6 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Zoek eens naar de modulo operator ;)

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


Acties:
  • 0 Henk 'm!

  • Ron
  • Registratie: Mei 2013
  • Laatst online: 16-09 16:18

Ron

code:
1
 if ($currentWeekNumber == (2 + 4))


deze regel zorgt er voor dat alleen als $currentweeknumber 6 is het volgende geprint wordt.

zoals @RobIII zegt zal je hier de modulo operator voor moeten gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Oke dankje jullie wel voor de snelle antwoorden. Ik ga het even googlen!

Acties:
  • 0 Henk 'm!

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 04-08 14:45
Eventueel kan je ook gewoon in_array gebruiken omdat het maar over beperkte data gaat.

RTFM!


Acties:
  • +1 Henk 'm!

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

NMe

Quia Ego Sic Dico.

_Moe_ schreef op maandag 19 maart 2018 @ 08:39:
Eventueel kan je ook gewoon in_array gebruiken omdat het maar over beperkte data gaat.
Dit ziet eruit als een praktijkoefening juist om die modulo-operator te vinden. Dat soort afkortingen nemen lijkt me niet verstandig. Sowieso is in_array veel meer tikwerk en naar verhouding een stuk trager, dus echt voordelen heeft het niet. ;)

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

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
_Moe_ schreef op maandag 19 maart 2018 @ 08:39:
Eventueel kan je ook gewoon in_array gebruiken omdat het maar over beperkte data gaat.
PHP:
1
2
3
4
$number = 14;
$lastNumber = substr($number, -1);

var_dump( in_array($lastNumber, [0,2,4,6,8]) );


:')

Acties:
  • +3 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
4Real schreef op maandag 19 maart 2018 @ 10:07:
[...]

PHP:
1
2
3
4
$number = 14;
$lastNumber = substr($number, -1);

var_dump( in_array($lastNumber, [0,2,4,6,8]) );


:')
Post dan niks zeg :X :F :N

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


Acties:
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
4Real schreef op maandag 19 maart 2018 @ 10:07:
[...]

PHP:
1
2
3
4
$number = 14;
$lastNumber = substr($number, -1);

var_dump( in_array($lastNumber, [0,2,4,6,8]) );


:')
Is nog fout ook. Jij geeft waar terug bij alle even getallen. Ook bij bv 4 en 24. Dat was de opdracht niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Daos schreef op maandag 19 maart 2018 @ 18:33:
[...]

Is nog fout ook. Jij geeft waar terug bij alle even getallen. Ook bij bv 4 en 24. Dat was de opdracht niet.
Dat is niet waar:

in_array(4, [..]) geeft indien er in de array een 4 staat altijd true terug.

Acties:
  • 0 Henk 'm!

  • _Moe_
  • Registratie: Mei 2006
  • Laatst online: 04-08 14:45
Verwijderd schreef op dinsdag 20 maart 2018 @ 13:37:
[...]


Dat is niet waar:

in_array(4, [..]) geeft indien er in de array een 4 staat altijd true terug.
Lees de vraag eens na

RTFM!


Acties:
  • 0 Henk 'm!

Verwijderd

hoe bedoel je ? het is niet bij even getallen, de waarde 4 wordt in de in_array() meegestuurd en deze zal (indien de array gevuld is met 4) altijd true teruggeven. dat is niet wat de topicstarter wil noch wat erboven genoemd werd (altijd even...)

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Verwijderd heb je überhaupt gezien dat de fout "substr($number, -1)" is?
Die geeft een 0, 1, 2, 3, 4, 5, 6, 7, 8 of 9 terug.
Dat is fout voor 4 en 24, maar goed voor 14.


Dat het ene jaar 52 en het andere 53 weken heeft en er dus een rare overlap is, noch daar gelaten.
Week 50 - week 2 = 4 of 5 weken.
365,25 dagen is gewoon lastig eerlijk te verdelen.

[ Voor 36% gewijzigd door DJMaze op 20-03-2018 15:24 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

Verwijderd

als $number op 14 staat, dan is substr($number, -1) 4

en in_array(4, [0,2,4,6,8]) geeft true terug maar om de topicstarter te helpen en niet te zeuren over slechte code voorbeelden:

2, 6, 10, 14, 18, 22, oplossen met modulo

$currentWeekNumber = date('W');
if($currentWeekNumber % 4 == 2){
//we have the week
}

[ Voor 3% gewijzigd door Verwijderd op 20-03-2018 17:09 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 20 maart 2018 @ 17:07:
maar om de topicstarter te helpen en niet te zeuren over slechte code voorbeelden:
Je helpt iemand niet door 't kant-en-klaar voorgekauwd aan te leveren.
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime.

[ Voor 47% gewijzigd door RobIII op 20-03-2018 17:18 ]

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


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Als je van bitwise operators houdt, kun je ook naar de drietwee laatste bitjes kijken :+

[ Voor 6% gewijzigd door GlowMouse op 20-03-2018 20:27 . Reden: thx Daos ]


Acties:
  • 0 Henk 'm!

Verwijderd

RobIII schreef op dinsdag 20 maart 2018 @ 17:16:
[...]

Je helpt iemand niet door 't kant-en-klaar voorgekauwd aan te leveren.

[...]

En daarbij is je implementatie nog steeds niet wat TS wil:

[...]
want 2 % 4 == 2 etc... moet ik de echo er ook nog tussen zetten ? leg uit...
was het gezeik om dat slechte voorbeeld zat, want substr($string, -1) geeft de string vanaf het einde naar voren... 8)7

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 20 maart 2018 @ 17:19:
want 2 % 4 == 2 etc... moet ik de echo er ook nog tussen zetten ? leg uit...
Nee, dat was my bad. Ik herinnerde me 't voorbeeld van TS anders en heb ik ook meteen weer weggehaald :*
Je implementatie werkt correct (hence de "give a man a fish..." quote ;) )
Verwijderd schreef op dinsdag 20 maart 2018 @ 17:19:
was het gezeik om dat slechte voorbeeld zat, want substr($string, -1) geeft de string vanaf het einde naar voren... 8)7
Je wil hier helemaal geen string-functies gebruiken; dat is het hele punt. Dit was, als het goed is, alles wat TS nodig had. Desnoods was TS teruggekomen met "ik snap niet precies wat 't ding doet" en dan hadden we daar op kunnen reageren. Alle posts daarna (en dat zeg ik niet omdat ik toevallig als eerste postte) zijn vrij overbodig en voegen weinig toe (en sindsdien hebben we ook niets meer van TS gehoord overigens).

[ Voor 32% gewijzigd door RobIII op 20-03-2018 17:25 ]

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


Acties:
  • 0 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
@Verwijderd Vul eens 24 in in je voorbeeld. Je krijgt dan:
Verwijderd schreef op dinsdag 20 maart 2018 @ 17:07:
als $number op 24 staat, dan is substr($number, -1) 4

en in_array(4, [0,2,4,6,8]) geeft true terug
Dat geeft dus waar terug bij 24 terwijl 24 niet in het rijtje 2, 6, 10, 14, 18, 22, 26 voorkomt. Dan klopt dat stukje code toch niet?
RobIII schreef op dinsdag 20 maart 2018 @ 17:20:
Alle posts daarna (en dat zeg ik niet omdat ik toevallig als eerste postte) zijn vrij overbodig en voegen weinig toe (en sindsdien hebben we ook niets meer van TS gehoord overigens).
Valt toch wel mee? Er werd een vreemde suggestie gedaan. Ik geef aan dat die niet eens juist is en over die juistheid komt een kleine discussie. Lijkt mij vrij leerzaam.

edit:
GlowMouse schreef op dinsdag 20 maart 2018 @ 17:19:
Als je van bitwise operators houdt, kun je ook naar de drie twee laatste bitjes kijken :+
FTFY

[ Voor 11% gewijzigd door Daos op 20-03-2018 20:25 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Daos schreef op dinsdag 20 maart 2018 @ 18:21:
@Verwijderd Vul eens 24 in in je voorbeeld. Je krijgt dan:


[...]


Dat geeft dus waar terug bij 24 terwijl 24 niet in het rijtje 2, 6, 10, 14, 18, 22, 26 voorkomt. Dan klopt dat stukje code toch niet?


[...]


Valt toch wel mee? Er werd een vreemde suggestie gedaan. Ik geef aan dat die niet eens juist is en over die juistheid komt een kleine discussie. Lijkt mij vrij leerzaam.
Daarom vulde ik ook 4 in bij de in_array, ik heb ook helemaal niet gezegd dat dat stukje code klopt, in tegendeel ik vind dat stukje gewoon een slecht voorbeeld en ben het dan eens met Rob. maar je zou ook een array met weeknummers kunnen gebruiken, en doe dan gelijk in_array(date('W'), [2, 6 ...]) als voorbeeld. 'T kan bijvoorbeeld anders zijn in een vakantie periode...

Acties:
  • +1 Henk 'm!

  • Daos
  • Registratie: Oktober 2004
  • Niet online
Met arraytjes zou je het overigens wel zo op kunnen lossen :P :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
function withArrays($var) {
    $a0 = [0,4,8];
    $a1 = [2,6];
    
    $digit0 = substr($var, -1);
    $digit1 = substr($var, -2, 1);

    if (in_array($digit1, array_merge($a0, $a1))) {
        return in_array($digit0, $a1);
    } else {
        return in_array($digit0, $a0);
    }
}

Acties:
  • 0 Henk 'm!

  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Modulo zou hint genoeg moeten zijn, maar de gruwelijke oplossing van Daos hierboven hadden we anders gemist. Ervaring met obfuscation? ;)

{signature}


Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
@Daos & @Voutloos natuurlijk kan je het zo gek maken als je zef wilt.
PHP:
1
2
3
if (0 == substr(floor((2.0 + date('W')) * 10 / 4), -1)) {
    //....
}

Maar goed daarvoor is de website http://thedailywtf.com/

[ Voor 16% gewijzigd door DJMaze op 20-03-2018 22:11 ]

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
volgens mij werkt het volgende ook:
PHP:
1
2
3
if (is_integer((date('W') -2 ) / 4) === true) {
   // ...
}

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoi allen,

Dank voor de vele reacties! Ik heb afgelopen week al een beetje lopen googlen naar modulo operator en ik begin het te begrijpen. Aankomend weekend hoop ik dat ik er tijd voor heb om het uit te proberen. Het enige wat je wel zou moeten doen is het na elk jaar opnieuw instellen, denk ik? Aangezien elk jaar niet altijd hetzelfde aantal weken heeft. Of ik zou moeten switchen naar een ander systeem dat het bijvoorbeeld elke maandag en na 4 weken een signaal geeft en niet meer met weeknummers te werk moet gaan.

Nogmaals dank voor de reacties!

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 23 maart 2018 @ 06:34:
Het enige wat je wel zou moeten doen is het na elk jaar opnieuw instellen, denk ik?
Die vraag kun alleen jij beantwoorden; het is nogal van belang wat de eisen zijn (of juist niet).

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

Pagina: 1