Toon posts:

[PHP] arrays, logica foutje

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
Hey tweakers!,

Ik zit met een raar probleem, wat vast simpel is op te lossen.
Namelijk de situatie :
Een array met timestamps, waarbij sommige key values veranderd moeten worden naar bezet.

Voorbeeld:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$bezet = array();

$bezet[0]['van'] = 13451656;
$bezet[0]['tot'] = 13455135;

$bezet[1]['van'] = 13458135;
$bezet[1]['tot'] = 13459135;

$times = array(); // deze array gaat langer door, en is maar een voorbeeld met timestamps, die steeds incrementen met een half uur.

$times[0] = 13451656;
$times[1] = 13452456;
$times[2] = 13453156


Nu wil ik door beide arrays kijken, en waar nodig de numerieke key values van de array "times" veranderen in bezet, waar nodig.

IE: gewenst resultaat:

// edit ik weet dat dit niet zo werkt :(, heb helaas het voorbeeld waarmee ik werk niet bij de hand.

PHP:
1
2
3
4
5
$times= array(); 
$times[0]['bezet'] = 13451656;
$times[1]['bezet'] = 13452456;
$times[2]['vrij'] = 13453156;
$times[3]['bezet'] = 13454456;


Hoe zou ik dit het beste kunnen aanpakken, aangezien ik hier al een tijd mee vast zit.

Edit:
Het gewenste resultaat word dus :
Een array die ik uit zou kunnen lezen, waarvan ik de tijden die bezet zijn, ge-dis-abled kan neerzetten, terwijl de andere tijden nog beschikbaar zijn :)


Bedankt!

[Voor 26% gewijzigd door stategamer op 10-05-2011 15:23]


Acties:
  • 0Henk 'm!

Anoniem: 20531

Je hebt nu meerdere items in een array met dezelfde key naam ''bezet''. deze moeten altijd uniek zijn.

Acties:
  • 0Henk 'm!

  • NinjaTuna
  • Registratie: Mei 2011
  • Laatst online: 23-05 14:44
Meerdere identieke keys in dezelfde array werkt niet hea...
Hoe zou je anders later de array gericht willen lezen?

Acties:
  • 0Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 31-05 23:51

krvabo

MATERIALISE!

Ik snap je hele doelstelling niet echt, maar is het niet oplosbaar door gebruik te maken van mutlidimensionale arrays ?

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0Henk 'm!

  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 09-05 17:56

Killemov

Ik zoek nog een mooi icooi =)

krvabo schreef op dinsdag 10 mei 2011 @ 14:53:
Ik snap je hele doelstelling niet echt, maar is het niet oplosbaar door gebruik te maken van mutlidimensionale arrays ?
Precies en dan met de timestamp als key.

PHP gebruikt toch een associatief array? Dat is dan vergelijkbaar met een Map in Java. Als je meer values met dezelfde key schrijft, dan telt de laatste.

Hey ... maar dan heb je ook wat!


Acties:
  • 0Henk 'm!

  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 27-12-2022
ik denk dat je inderdaad beter een array kunt maken met de timestamp als key en true/false als value waar je afspreekt dat true bijv staat voor bezet en false voor vrij
dus zo:
PHP:
1
$bezet = array(13451656 => true, 13455135 => false);

Acties:
  • 0Henk 'm!

Anoniem: 20531

Ja, want timestamps zullen altijd uniek zijn 8)7

Voordat je dat advies geeft is het misschien verstandig wat meer van het project te weten.

[Voor 3% gewijzigd door Anoniem: 20531 op 10-05-2011 14:58]


Acties:
  • 0Henk 'm!

  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 27-12-2022
Anoniem: 20531 schreef op dinsdag 10 mei 2011 @ 14:58:
Ja, want timestamps zullen altijd uniek zijn 8)7

Voordat je dat advies geeft is het misschien verstandig wat meer van het project te weten.
hij geeft aan dat hij een array van timestamps heeft die steeds incrementen met een half uur, dus dan lijkt het me logisch dat al zijn timestamps uniek zijn. of lees ik dat nou verkeerd?

[Voor 3% gewijzigd door dragontje124 op 10-05-2011 15:03]


Acties:
  • 0Henk 'm!

  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
Alvast bedankt voor de reacties! :)

Het idee is :
1. Een array met waardes, waarin staat of het tijdstip vrij is, ja of nee.
2. Een array met, de tijdstippen van de bijbehorende dag.

Vanuit array 1 wil ik dus de tijdstippen ophalen, en deze verwerken in de array van de bijbehorende dag, zodat ik van deze array gebruik kan maken, om een soort dropdown menu te kunnen maken met beschikbare / niet beschikbare tijden (deze zijn disabled).

Acties:
  • 0Henk 'm!

Anoniem: 20531

dragontje124 schreef op dinsdag 10 mei 2011 @ 15:02:
[...]

hij geeft aan dat hij een array van timestamps heeft die steeds incrementen met een half uur, dus dan lijkt het me logisch dat al zijn timestamps uniek zijn. of lees ik dat nou verkeerd?
Dat had ik niet gelezen....

Acties:
  • 0Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 31-05 23:51

krvabo

MATERIALISE!

Je hebt een array met tijden waarop het bezet is. Dat is 1.
Je hebt een array met alle tijden van de dag (eigenlijk nutteloos aangezien je dat gewoon kan loopen), dat is 2.

Werk je met meerdere kamers / velden / locaties (hetgene dat bezet kan zijn)? Zoja, dan klopt je eerste array niet. Dan moet je daar een multidimensionale array gebruiken.

Indien je 'van' en 'tot' ook meerdere tijden kan innemen (dus zegmaar een periode van 2 uur) dan zul je meer logica moeten gebruiken om te kijken of de tijd die je wilt disablen tussen de 'van' en 'tot' ligt. Indien je steeds maar 1 tijdsperiode overspant tussen 'van' en 'tot' kun je gebruikmaken van in_array(); tijdens het loopen van array 2.

[Voor 4% gewijzigd door krvabo op 10-05-2011 15:11]

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0Henk 'm!

  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
krvabo schreef op dinsdag 10 mei 2011 @ 15:10:
Je hebt een array met tijden waarop het bezet is. Dat is 1.
Je hebt een array met alle tijden van de dag (eigenlijk nutteloos aangezien je dat gewoon kan loopen), dat is 2.

Werk je met meerdere kamers / velden / locaties (hetgene dat bezet kan zijn)? Zoja, dan klopt je eerste array niet. Dan moet je daar een multidimensionale array gebruiken.

Indien je 'van' en 'tot' ook meerdere tijden kan innemen (dus zegmaar een periode van 2 uur) dan zul je meer logica moeten gebruiken om te kijken of de tijd die je wilt disablen tussen de 'van' en 'tot' ligt. Indien je steeds maar 1 tijdsperiode overspant tussen 'van' en 'tot' kun je gebruikmaken van in_array(); tijdens het loopen van array 2.
Dit is wel de richting die ik uit wil.
Meerdere tijden per dag, zie TS *ge-edit*.
Dus ik zit min of meer nog steeds met het logica foutje waarbij ik dus door 2 arrays moet kijken, waarvan er dus in array #2 meerdere in een rij bezet kunnen zijn, en dan vervolgens een pauze, waarna die weer een aantal key values in een rij moet veranderen.

Thanks! :)

Acties:
  • 0Henk 'm!

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 31-05 23:51

krvabo

MATERIALISE!

- Heb je meerdere dingen die bezet kunnen zijn, of is het altijd maar één ding?

Ik ga vooralsnog uit van 1 kamer / lokaal / veld / zaal / etc.

Pseudocode:
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
<?

$bezet[0]['van'] = 13451656;
$bezet[0]['tot'] = 13455135;

$bezet[1]['van'] = 13458135;
$bezet[1]['tot'] = 13459135; 


$times = array();

$times[0] = 13451656;
$times[1] = 13452456;
$times[2] = 13453156; // [..] ad infinitum

/* Op deze manier kun je het met 2 loops oplossen: */

?><select name="time"><?
foreach($times as $iTime) {
  ?>
  <option value="<?=$iTime;?>">
  <?
  // pseudocode
  foreach($bezet as $aBezet) {
    [if $aBezet['van'] <= $iTime && $aBezet['tot'] > $iTime]
      [bezet]
    [/if]
  }
  ?>
  </option>
  <?
}
?> 

Op zo'n manier zou je dan moeten checken.
Uiteraard kun je dit veel efficienter opbouwen, maar ik denk dat dit zo zou moeten werken (ongetest) met de data die je hebt.

Pong is probably the best designed shooter in the world.
It's the only one that is made so that if you camp, you die.


Acties:
  • 0Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Anoniem: 20531 schreef op dinsdag 10 mei 2011 @ 14:49:
Je hebt nu meerdere items in een array met dezelfde key naam ''bezet''. deze moeten altijd uniek zijn.
Nee hoor, die zijn gewoon multidimensionaal. In het voorbeeld wat er staat zijn er geen keys die elkaar overschrijven.

Acties:
  • 0Henk 'm!

Anoniem: 20531

Cartman! schreef op dinsdag 10 mei 2011 @ 22:36:
[...]

Nee hoor, die zijn gewoon multidimensionaal. In het voorbeeld wat er staat zijn er geen keys die elkaar overschrijven.
De TS heeft zijn topic start aangepast waardoor mijn opmerking nogal nutteloos is.

  • stategamer
  • Registratie: December 2007
  • Laatst online: 21-05 15:13
krvabo schreef op dinsdag 10 mei 2011 @ 16:17:
- Heb je meerdere dingen die bezet kunnen zijn, of is het altijd maar één ding?

Ik ga vooralsnog uit van 1 kamer / lokaal / veld / zaal / etc.

Pseudocode:
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
<?

$bezet[0]['van'] = 13451656;
$bezet[0]['tot'] = 13455135;

$bezet[1]['van'] = 13458135;
$bezet[1]['tot'] = 13459135; 


$times = array();

$times[0] = 13451656;
$times[1] = 13452456;
$times[2] = 13453156; // [..] ad infinitum

/* Op deze manier kun je het met 2 loops oplossen: */

?><select name="time"><?
foreach($times as $iTime) {
  ?>
  <option value="<?=$iTime;?>">
  <?
  // pseudocode
  foreach($bezet as $aBezet) {
    [if $aBezet['van'] <= $iTime && $aBezet['tot'] > $iTime]
      [bezet]
    [/if]
  }
  ?>
  </option>
  <?
}
?> 

Op zo'n manier zou je dan moeten checken.
Uiteraard kun je dit veel efficienter opbouwen, maar ik denk dat dit zo zou moeten werken (ongetest) met de data die je hebt.
Deze oplossing heeft meegeholpen aan het eind resultaat dat ik wilde! Bedankt! :)
Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee