Autor Zpráva
Fík
Profil *
Dobrý den,

lámu si tu hlavu s jedním oříškem a už mi došli nápady jak bych to mohl ještě zkusit. Uvedu vám názorný příklad. Mám 4 pole, ale jako klíč je uveden timestamp, které se mění například po 900 sekundách. Tedy:

$pole = array();

$pole[1383289200] = array(...); 
$pole[1383290100] = array(...); //+900s
$pole[1383291000] = array(...); //+900s
$pole[1383291900] = array(...); //+900s
$pole[1383293700] = array(...); //+1800s
$pole[1383294600] = array(...); //+900s

Takže jsou tam celkem 3 pole, které přidaly 900 sekund za sebou, pak je tam nepravidelnost 1800 sekund a opět 900 sekund. A já potřebuji sloučit všechny za sebou jdoucí pravidelnosti. Tedy představoval bych si něco jako:

while (array_key_exist($posledniTimestamp+900, $pole)) {...}

Bohužel ale nevím jak tohle realizovat a zda je to vůbec možné, vyzkoušet jsem to samozřejmě chtěl, ale nevím jak to dát dohromady. Předem díky všem za rady.
Tori
Profil
Sloučit jak - array_merge, nebo $pole[timestamp1][něco] + $pole[timestamp2][něco] ?


Jinak stačí obyč. foreach. V proměnné třeba $i máte klíč pro cílové (sloučené) pole $vysledek. V cyklu (procházíte pole $pole) si ukládáte aktuální klíč-timestamp, v další iteraci porovnáte se současným, pokud je rozdíl větší než 900, tak inkrementujete $i. V každé iteraci sloučíte současný prvek pole s tím ve $vysledek[$i] a uložíte si aktuální klíč-timestamp.
Fík
Profil *
No spíše jsem myslel do nějakého pole zvlášť. Pokud budou za sebou 2 (a více) pole, kterým se klíč zvětšil o 900 tak je vložit do jednotného pole.


Tori:

No s tím foreach by to šlo, ale tam to půjde jen u dvou za sebou jdoucích ne? Protože foreach neumí pokračovat v tom v čem skončil, pokud mi rozumíte. Tedy když jedno pole bude zvýšené o těch 900, tak o tom dalším se to už nedozví.
Tori
Profil
Jedno pole procházíte, do druhého ukládáte. Trochu jsem to v tom popisu ještě ujasnila (snad), co se týká čeho.
Fík
Profil *
Už to chápu, super, díky!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0