2009-08-04 12 views
4

Ich muss Daten alle 10 Sekunden in einem Array setzen. Ist es albern, dieses Array mit modifizierten Zeitstempeln zu indizieren?Indexieren eines Arrays in jedem Zyklus (in Sekunden)

$ a [Zeitstempel] = 54; $ a [Zeitstempel + 10] = 34;

oder in Javascript mit dem setInterval() und Weitergabe über Ajax der Index (sehr beschissen zu mir)?

oder habe ich eine beste Option?

Weitere Informationen:

  • Ich habe die in Echtzeit mit den Einträgen in meinem Array verbinden: das ist mein Problem. Im 3. Zyklus (21 Sek. Bis 30 Sek. Von der Anfangszeit).
  • Ich habe nur 15 Einträge zu speichern.
  • Mein jetziger Code:

    first_time $ = (int) date ('Hallo'); $ _SESSION ['mypile'] [$ erste_zeit] = array_fill ($ erste_zeit, 15, array ('paraMa' => 0, 'paramB' => 0));

dann der Ajax Teil ruft dieses Skript:

$time = (int)date('Hi'); 
$_SESSION['mypile'][$time]['paramA'] = calcul_temp($_SESSION['mypile'], $time); 

Antwort

0

Ok, damit ich alle 10 Sekunden mein Zeitstempel abzurunden entschieden Stücke Zeit zu haben. Einfach, albern und arbeite für mich.

Vielen Dank für Ihre Ideen.

2

Warum würden Sie nicht ein einfaches numerisch indiziertes Array verwenden? Wenn Sie nicht müssen den Zeitstempel, dann:

$a[] = 54; 

$a[] = 34; 

Wenn Sie den Zeitstempel tun müssen, dann wäre es sinnvoll, so etwas wie:

$a[] = array('timestamp' => time(), 'number' => 54); 

$a[] = array('timestamp' => time(), 'number' => 34); 

Dann an jedem Sie Offset haben eine aussagekräftigere assoziatives Array:

echo 'Timestamp: ' . $a[0]['timestamp'] . ', Number: ' . $a[0]['number']; 

Wenn diese Vorgänge in schneller Folge geschehen, würden Sie wahrscheinlich besser mit microtime

+0

Warum macht das mehr Sinn?Warum nicht einfach mit der Zeit indexieren? –

+0

Wie ich hinzugefügt habe, muss ich den aktuellen Zeitstempel mit meinem Array verknüpfen. Vielleicht mache ich das in Javascript ... –

+0

Das funktioniert, aber Traversieren macht mehr Spaß, wenn es ein einfaches Array ist. – karim79

0

Das scheint eine sehr gute Lösung zu sein, aber Sie müssen auf die Speichernutzung achten, wenn das Skript für eine lange Zeit läuft.

+0

ok, ich hätte genauer sein sollen, ich habe nur 15 Werte zu halten. –

0

Das ist ziemlich dumm; Wenn Sie ein Zeitintervall festgelegt haben, lassen Sie Ihre Funktion alle 10 Sekunden aufrufen und fügen Sie Ihre neue Nummer dem nächsten Index im Array hinzu. Verfolgen Sie diesen Index global oder im Rahmen der Iteration.

+0

Was ist, wenn er den Zeitstempel aufzeichnen muss? Wenn ja, ist dies eine gute Methode. – BabyCakes

+0

Es ist alle 10 Sekunden, 15 mal, dann hör auf. Ich habe auch diese Idee, wie Karim79 sagte: Lassen PHP Index das Array, und rufen Sie meine PHP-Ajax alle 10 Sekunden. –

+0

Ja, genau das sollten Sie tun. – AlbertoPL

0
$a['timestamp'] = time(); 
while (true) { 
    $a['data'][] = getData(); 
    sleep(10); 
} 

Sie könnten eine Klasse daraus machen. Das Konstrukt setzt dann den Zeitstempel, und mit SPL-Array-Index und Iterator kann es in foreach geloopt und mit einigen Array-Funktionen verwendet werden. Sie können ein Verfahren machen eine Reihe zu bekommen, mit oder ohne Zeitstempel usw.

$dataCycle = new DataCycle(); 
while(true) { 
    $dataCycle->addData(getData()); 
    sleep(10); 
} 
+0

Ich möchte mein System so einfach wie möglich halten, es ist ein POC. –