Problem mit Array + TimeStamp

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit Array + TimeStamp

    Hi!

    Folgendes Problem quält mich nun schon seit mehreren Stunden - vielleicht weiss ja einer von euch Rat =) Also:

    Ich lese mir aus einer Datenbank bestimmte Timestamps aus,
    diese hab ich dann in einem Array und durchlaufe dieses unter folgenden Gesichtspunkten:

    - Vergleiche den aktuellen TS mit dem vorherigem TS
    - Ist der aktuelle TS GRÖSSER als der vorherige + 1 Stunde (3600)
    - wenn ja schreib ihn in ein neues Array an die aktuelle Position +1
    - wenn nein schreib ihn an die aktuelle Position + []

    Hier mal der Code dafür:
    PHP-Code:
    for ($ii=1;$ii<=count($aTimeStamps); $ii++)
        {
            
    $i=$ii-1;
            
            if(
    $i>0
            {
                
    $letzterTimeStamp $aTimeStamps[$i-1];
            } 
            else 
            {    
                
    $aKlick[$i][] = $aTimeStamps[$i];
            }
            
            if(
    $letzterTimeStamp!=null
            {
                if (
    $aTimeStamps[$i] >= $letzterTimeStamp+3600
                {
                    
    $aKlick[$i+1][] = $aTimeStamps[$i];
                }
                else 
                {
                    
    $aKlick[$i][] = $aTimeStamps[$i];
                }
            }
        } 
    Ich bekomme folgendes Array aus dieser Ausgabe:
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => 1106224030
            
    )

        [
    1] => Array
            (
                [
    0] => 1106224170
            
    )

        [
    2] => Array
            (
                [
    0] => 1106224339
            
    )

        [
    3] => Array
            (
                [
    0] => 1106224361
            
    )

        [
    4] => Array
            (
                [
    0] => 1106225800
            
    )

        [
    5] => Array
            (
                [
    0] => 1106225837
            
    )

        [
    6] => Array
            (
                [
    0] => 1106225851
            
    )

        [
    7] => Array
            (
                [
    0] => 1106225911
            
    )

        [
    8] => Array
            (
                [
    0] => 1106225921
            
    )

        [
    9] => Array
            (
                [
    0] => 1106226038
            
    )

        [
    10] => Array
            (
                [
    0] => 1106226068
            
    )

        [
    11] => Array
            (
                [
    0] => 1106226084
            
    )

        [
    12] => Array
            (
                [
    0] => 1106226107
            
    )

        [
    13] => Array
            (
                [
    0] => 1106226352
            
    )

        [
    14] => Array
            (
                [
    0] => 1106226376
            
    )

        [
    15] => Array
            (
                [
    0] => 1106226383
            
    )

        [
    16] => Array
            (
                [
    0] => 1106226426
            
    )

        [
    17] => Array
            (
                [
    0] => 1106226438
            
    )

        [
    18] => Array
            (
                [
    0] => 1106226482
            
    )

        [
    19] => Array
            (
                [
    0] => 1106226494
            
    )

        [
    20] => Array
            (
                [
    0] => 1106226565
            
    )

        [
    21] => Array
            (
                [
    0] => 1106226702
            
    )

        [
    22] => Array
            (
                [
    0] => 1106226987
            
    )

        [
    23] => Array
            (
                [
    0] => 1106227025
            
    )

        [
    24] => Array
            (
                [
    0] => 1106227059
            
    )


    Wie man aber unschwer erkennen kann - es sei denn ich guck einfach blöd *g* - sind viele Timestamps eben NICHT mehr als eien Stunde von einander entfernt und müssten daher zuammen in einem Container liegen ... kann mir das jemand erklären?

    Hier übrigens eine kleinere Timestamp Liste mit der es anscheinend funktioniert
    PHP-Code:
    Array
    (
        [
    0] => Array
            (
                [
    0] => 1106221317
            
    )

        [
    1] => Array
            (
                [
    0] => 1106222608
            
    )

        [
    3] => Array
            (
                [
    0] => 1106229773
                
    [1] => 1106232148
            
    )

        [
    4] => Array
            (
                [
    0] => 1106232715
            
    )

        [
    5] => Array
            (
                [
    0] => 1106232870
            
    )

        [
    6] => Array
            (
                [
    0] => 1106233078
            
    )

        [
    7] => Array
            (
                [
    0] => 1106234275
            
    )

        [
    9] => Array
            (
                [
    0] => 1106239734
                
    [1] => 1106240406
            
    )


    Hofe es kann mir jemand helfen! Danke

  • #2
    du machst das viel zu kompliziert, daher verlierst du die Übersicht und weißt dann nicht mehr was was ist. Warum denn 'ne for-Schleife mit ii und dann nur noch mit i arbeiten indem du i = ii - 1 setzst? Deine Werte haben keine 3600 Sek. Differenz, aber da du i jedes Mal durch die Zuweisung i = ii -1 erhöht hast, hast du jedes Element in einem neuen Index kopiert, obwohl else immer anspringt.

    Besser:
    PHP-Code:
    <?php
    $aTimeStamps 
    = array(1106226383,1106226426,1106226438,
                         
    1106226482,1106226494,1106226565,
                         
    1106226702,1106232987,1106233025,
                         
    1106299059);

    $j 0// Init
    $aKlick[0][0] = $aTimeStamps[0]; // Init
    for ($i=1;$i<count($aTimeStamps); $i++) {
        
    $letzterTimeStamp $aTimeStamps[$i-1];
        if (
    $aTimeStamps[$i] >= $letzterTimeStamp+3600
            
    $aKlick[++$j][] = $aTimeStamps[$i];
        else 
            
    $aKlick[$j][] = $aTimeStamps[$i];
        
    $diff $aTimeStamps[$i] - $letzterTimeStamp;
        echo 
    $aTimeStamps[$i].' - '.$letzterTimeStamp.' = '.$diff.'<br />';
    }
    echo 
    '<pre>';
    print_r($aKlick);
    echo 
    '</pre>';
    ?>
    Output


    Code:
    1106226426 - 1106226383 = 43
    1106226438 - 1106226426 = 12
    1106226482 - 1106226438 = 44
    1106226494 - 1106226482 = 12
    1106226565 - 1106226494 = 71
    1106226702 - 1106226565 = 137
    1106232987 - 1106226702 = 6285
    1106233025 - 1106232987 = 38
    1106299059 - 1106233025 = 66034
    
    Array
    (
        [0] => Array
            (
                [0] => 1106226383
                [1] => 1106226426
                [2] => 1106226438
                [3] => 1106226482
                [4] => 1106226494
                [5] => 1106226565
                [6] => 1106226702
            )
    
        [1] => Array
            (
                [0] => 1106232987
                [1] => 1106233025
            )
    
        [2] => Array
            (
                [0] => 1106299059
            )
    
    )

    Kommentar


    • #3
      hmm also so ganz hatt ich deine erklärung zu dem WARUM nicht verstanden ... ?

      Kommentar


      • #4
        was ist denn hieran schwer zu verstehen?

        Deine Werte haben keine 3600 Sek. Differenz, aber da du i jedes Mal durch die Zuweisung i = ii -1 erhöht hast, hast du jedes Element in einem neuen Index kopiert, obwohl else immer anspringt.
        mach mal folgendes in deiner Schleife:
        PHP-Code:
        for ($ii=1;$ii<=count($aTimeStamps); $ii++)
            {
                
        $i=$ii-1;
                
                if(
        $i>0
                {
                    
        $letzterTimeStamp $aTimeStamps[$i-1];
                } 
                else 
                {    
                    
        $aKlick[$i][] = $aTimeStamps[$i];
                }
                
                if(
        $letzterTimeStamp!=null
                {
                    if (
        $aTimeStamps[$i] >= $letzterTimeStamp+3600
                    {
                         
        // hier einfügen
                         
        echo 'if wird ausgeführt - '.$i.'<br />';
                        
        $aKlick[$i+1][] = $aTimeStamps[$i];
                    }
                    else 
                    {
                         
        // hier einfügen
                         
        echo 'else wird ausgeführt - '.$i.'<br />';
                        
        $aKlick[$i][] = $aTimeStamps[$i];
                    }
                }
            } 
        schau dir den Output an, dann weißt du's (hoffentlich )

        Kommentar

        Lädt...
        X