Индексирование массива каждый цикл (в секундах) - PullRequest
4 голосов
/ 04 августа 2009

Я должен помещать данные каждые 10 секунд в массив. Глупо ли индексировать этот массив измененными временными метками

$ a [отметка времени] = 54; $ a [отметка времени + 10] = 34;

или в Javascript с помощью setInterval () и передачи через Ajax индекс (очень дурацкий для меня)?

или у меня есть лучший вариант?

Более подробная информация:

  • Мне нужно связать в реальном времени записи в моем массиве: это моя проблема. На 3-м цикле (от 21 до 30 секунд с начала).
  • У меня есть только 15 записей для хранения.
  • Мой нынешний код:

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

затем, Ajax-часть вызывает этот скрипт:

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

Ответы [ 5 ]

2 голосов
/ 04 августа 2009

Почему бы вам не использовать простой числовой индексированный массив? Если вам не нужна метка времени, тогда:

$a[] = 54; 

$a[] = 34;

Если вам нужна временная метка, то имеет смысл сделать что-то вроде:

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

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

Тогда при каждом смещении у вас есть более значимый ассоциативный массив:

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

Если эти операции происходят в быстрой последовательности, вам, вероятно, лучше использовать microtime

0 голосов
/ 04 августа 2009

Хорошо, поэтому я решил округлять свою метку времени каждые 10 секунд, чтобы иметь отрезки времени. Просто, глупо и работа для меня.

Спасибо за идеи.

0 голосов
/ 04 августа 2009
$a['timestamp'] = time();
while (true) { 
  $a['data'][] = getData(); 
  sleep(10); 
}

Вы могли бы сделать класс из этого. Затем конструкция устанавливает временную метку, и с помощью индекса и итератора массива SPL она может быть зациклена в foreach и использоваться с некоторыми функциями массива. Вы можете создать метод для получения массива с отметкой времени или без нее и т. Д.

$dataCycle = new DataCycle();
while(true) {
  $dataCycle->addData(getData());
  sleep(10);
}
0 голосов
/ 04 августа 2009

Это довольно глупо; если вы установили временной интервал, просто вызывайте вашу функцию каждые 10 секунд и добавьте новый номер к следующему индексу в массиве. Отслеживайте этот индекс глобально или в рамках итерации.

0 голосов
/ 04 августа 2009

Это кажется очень хорошим решением, хотя вам придется быть осторожным с использованием памяти, если скрипт будет работать в течение длительного времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...