Bir dizideki (saniye) her devirde endekslenmesi

5 Cevap php

Ben bir dizide verileri her 10 saniyede koymak zorunda. Endeksi bu saçma modifiye damgaları ile bu dizidir

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

veya setInterval ile Javascript () ve Ajax ile (benim için çok berbat) endeksi geçen?

yoksa ben bir iyi seçenek var?

Daha fazla detayı:

  • Bu benim sorunum: benim dizide girdileri ile gerçek zamanlı bağlantı var. 3 döngü de (21 sn başlangıcı zaman saniye 30).
  • Ben depolamak için sadece 15 kayıtları var.
  • Benim şimdiki kodu:

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

sonra, Ajax kısmı bu komut dosyası çağırır:

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

5 Cevap

Tamam ben zaman parçaları var, her 10 saniyede bir zaman damgası yuvarlak verdi. Basit, saçma ve benim için çalışır.

Fikirler için teşekkür ederiz.

Neden bir ova sayısal indisli bir dizi kullanmak olmaz? Eğer need damgası yoksa, o zaman:

$a[] = 54; 

$a[] = 34;

Eğer damgası ihtiyacınız yoksa, o zaman böyle bir şey yapmak daha mantıklı olur:

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

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

Sonra her biri daha anlamlı bir ilişkisel dizi var offset:

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

Bu işlemleri hızlı arkaya olursanız, muhtemelen daha iyi kullanarak microtime olurdu

Eğer komut uzun süre çalışan olacak eğer bellek kullanımı konusunda dikkatli olmak zorunda kalacak olsa da bu, çok iyi bir çözüm gibi görünüyor.

Yani oldukça aptalca; Bir zaman aralığını ayarlamak ettik, sadece fonksiyon her 10 saniyede denilen ve dizideki sonraki endeksi için yeni bir numara ekleyebilirsiniz. Küresel veya yinelemenin kapsamında bu endeksi takip edin.

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

Bunu bir sınıf yapabilir. Yapı daha sonra zaman damgası ayarlar ve SPL dizi indeksi ile ve foreach döngüye ve bazı dizi fonksiyonları ile kullanılabilir iterator. Sen, vb veya damgası olmadan bir dizisini almak için bir yöntem yapabilirsiniz

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