[PHP] Array vraag

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben bezig om de XML stream van Google Calendar te "vangen" in een array, zodat ik deze gegevens kan gebruiken in mijn eigen kalender.

Het resultaat is de volgende array

gegevens [key1] [key2] [key3]

key1 = unix timestamp van het begin moment van de afspraak
key2 = is een counter voor als er meerdere afspraken tegelijkertijd beginnen
key3 = key van de waardes die ik uitlees (Onderwerp, Samenvatting en Eindtijd)

Wat ik nu dus eigenlijk wil doen is kijken of key1 van de array binnen een bepaalde marge ligt (laten we zeggen >=unix timestamp begin dag x, en <unix timestamp begin dag x+1)....Kan dit eigenlijk wel, oftewel kan je "rekenen" met keys... Of kan ik de keys beter incrementeel laten zijn en hetzelfde bereiken dmv zoeken?? array_search of array_keys ofzo?

thx alvast!

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik vind dat je een heel vreemde constructie hebt voor je array.Sowieso lijkt het me meer een map, maar dat is een naamgevings issue van php zelf. Heb je daadwerkelijk een array met 3 dimensies? Het lijkt me persoonlijk namelijk een stuk makkelijker om met objecten te gaan werken. Een object kun je ook simpel enkel als een struct gebruiken. Dit maakt het een stuk makkelijker. Om vervolgens al je afpsraken bij elkaar te gooien kun je die objecten in een array stoppen.

Om te kijken of afspraken binnen een bepaalde periode vallen zul je ze allemaal bij langs moeten gaan en controleren. Er zijn wel snellere methoden, maar hierbij zul je al je afspraken in een boom op moeten gaan slaan.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Objecten klinkt inderdaad logisch, maakte gebruik van deze aanpak aangezien ik niet zo bekend ben met OOP in PHP (eigenlijk uberhaubt niet :)).

Wat me op dit moment wel gelukt is, alle keys uitlezen uit de array, dan stuk voor stuk beoordelen of ze binnen de gestelde range vallen, hierdoor moet ik dus voor elke dag mijn complete array doorlopen om te zoeken. Vooraf dacht ik dus eigenlijk dat het wel andersom zou kunnen, iets dat ik nu nog steeds zoek, alle waardes van een array weergeven waarvan de key valt binnen een bepaalde waarde... wanneer ik de php documentatie doorlees kom ik alleen de volgende functie tegen:


array array_slice ( array array, int offset [, int length [, bool preserve_keys]] )

array_slice() returns the sequence of elements from the array array as specified by the offset and length parameters.



Deze doet echter helaas niet wat ik wil :(

iemand nog andere ideeen / oplossingen??

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Je hoeft niet ineens alles OOP te gaan doen. ZOals ik zei kun je het ook gewoon als oude c-style structs gebruiken.

ff uit de losse pols:
PHP:
1
2
3
4
5
6
7
8
9
10
class Appointment {
  var $start;
  var $eind;
  var $omschrijving;
}

$a = new Appointment();
$a->start = mktime(dan en dan);
$a->eind = mktime(tot dan);
$a->omschrijving = "babbelen";

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


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Als ik het goed lees, wil je niet rekenen met keys, maar een bepaalde key zoeken in een PHP array. Kort gezegd: dit kan niet. Je kunt alleen testen of een array een bepaalde specifieke key heeft (met in_array bijvoorbeeld), maar als je keys in een bepaald bereik wil hebben, is het beste wat je kunt doen ze allemaal aflopen, of alle keys er met array_keys() uithalen en daar in zoeken (met een binary search ofzo, maar dat helpt niet echt).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@janoz, ik denk dat ik daardoor nog steeds hetzelfde probleem heb, dan moet ik al mijn instances van appointment gaan aflopen om te zoeken of er ergens een zekere instance een property $start heeft die valt binnen de dag die ik aan het "beoordelen" ben.

@Soultaker, hoe kan ik binnen een array (als values) zoeken naar een range van waarden dan?? zoals ik nu lees kan ik binnen een array eigenlijk alleen maar 1 exacte waarde zoeken in een array, wanneer deze enigszins afwijkt krijg ik dus 0 terug.

Even wat betreft performance, stel ik heb een script dat een kalender genereerd, in het slechtste geval moet hij dus 31x checken of op die dag een afspraak staat in mijn uit de xml-file gedestilleerde array, wanneer ik +/- 100 afspraken heb staan moet hij dat dus behoorlijk vaak doorlopen. Performed dat wel?? Of kan ik beter bij m'n oude vertrouwde traditionele database kalendertje blijven??

Het leek namelijk zo mooi, google's kalender functionaliteit als "backoffice" voor mijn php script.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb het opgelost op een hele eenvoudige manier... stom dat je aan dat soort dingen, na een lange dag klooien, niet meer denkt.

Aangezien ik de timestamp heb ik [key1], kan ik deze dus net zo goed "transformeren" in een simpele datum: yyyy-mm-dd, aangezien dit vrij eenvoudig te checken is in de array ben ik zo dus geholpen!

Allemaal bedankt voor de inbreng!

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 16:28
Overigens was je suggestie om de kalender in een relationele database te bewaren ook helemaal niet verkeerd. PHP is vooral handig als front-end van een database; het opslaan, ordenen en zoeken in grote hoeveelheden gegevens kun je veel beter in een database doen.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Verwijderd schreef op woensdag 04 oktober 2006 @ 17:58:
@janoz, ik denk dat ik daardoor nog steeds hetzelfde probleem heb, dan moet ik al mijn instances van appointment gaan aflopen om te zoeken of er ergens een zekere instance een property $start heeft die valt binnen de dag die ik aan het "beoordelen" ben.
Dat klopt, maar je code wordt wel een stuk leesbaarder waardoor je je beter op het daadwerkelijke probleem kunt richten ipv ontcijveren welke key je nu exact aan het bewerken bent.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@Soultaker, het betreft hier alleen een xml stream van google calendar... dus het hele "effect" zou wegzijn als ik deze stream in een database zou knallen... het mooie hiervan, tenminste dat hoop ik, is dat ik mijn kalender op mn website kan beheren met google calendar!

@janoz, helemaal mee eens, ik denk dat ik bij toekomstige "projecten" ook zeker hiervan gebruik ga maken, zit toch al tijden met het idee te spelen om meer vanuit OO te gaan programmeren.

allemaal bedankt voor nuttige input!
Pagina: 1