[PHP] arrays, logica foutje

Pagina: 1
Acties:

Onderwerpen


  • stategamer
  • Registratie: December 2007
  • Laatst online: 26-08 14:46
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 ]


Verwijderd

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

  • NinjaTuna
  • Registratie: Mei 2011
  • Laatst online: 21-04 10:19
Meerdere identieke keys in dezelfde array werkt niet hea...
Hoe zou je anders later de array gericht willen lezen?

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 30-10 13:00

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.


  • Killemov
  • Registratie: Januari 2000
  • Laatst online: 25-09 11:11

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!


  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 11-10 18:48
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);

Verwijderd

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 Verwijderd op 10-05-2011 14:58 ]


  • dragontje124
  • Registratie: Mei 2009
  • Laatst online: 11-10 18:48
Verwijderd 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 ]


  • stategamer
  • Registratie: December 2007
  • Laatst online: 26-08 14:46
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).

Verwijderd

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

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 30-10 13:00

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.


  • stategamer
  • Registratie: December 2007
  • Laatst online: 26-08 14:46
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! :)

  • krvabo
  • Registratie: Januari 2003
  • Laatst online: 30-10 13:00

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.


  • Cartman!
  • Registratie: April 2000
  • Niet online
Verwijderd 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.

Verwijderd

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: 26-08 14:46
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