Ein Algorithmusproblem, bitte geben Sie mir einen Rat

WBOY
Freigeben: 2016-08-18 09:15:28
Original
992 Leute haben es durchsucht

Ein Algorithmusproblem, bitte geben Sie mir einen Rat

Wie oben gezeigt, ist der Zeitpunkt des Betretens des Raums ein Datensatz und der Zeitpunkt des Verlassens ist für jeden Benutzer unterschiedlich Array-Form, Datenbank Der gespeicherte Datensatz sieht so aus
['id'=>1,'uid'=>22,'stauts'=>'leave','time'=>1415947332]
['id '=>2,'uid'=>22,'stauts'=>'Enter','time'=>1415947333]
['id'=>3,'uid '=> 22,'stauts'=>'Leave','time'=>1415997332]
['id'=>4,'uid'=>22,'stauts'=> 'Enter', 'time'=>1416947333]
['id'=>6,'uid'=>23,'stauts'=>'Leave','time'=>1415947332]
[ 'id'=>7,'uid'=>23,'stauts'=>'Enter','time'=>1415947333]
['id'=>8, 'uid'= >23,'stauts'=>'Leave','time'=>1415997332]
['id'=>9,'uid'=>23,'stauts'= >'Enter ','time'=>1416947333]
...

<code>$data=[
    [0]=>[
        'begin_time'=>第一个进入时间,
        'end_time'=>第一个出去时间,
    ],
    [1]=>[
        'begin_time'=>第二个进入时间,
        'end_time'=>第二个出去时间,
    ],
    [2]=>[
        'begin_time'=>第三个进入时间,
        'end_time'=>第三个进出去时间,
    ],
    [3]=>[
        'begin_time'=>第四个进入时间,
        'end_time'=>第四个进出去时间,
    ]

.....
</code>
Nach dem Login kopieren
Nach dem Login kopieren

]

Antwortinhalt:

Ein Algorithmusproblem, bitte geben Sie mir einen Rat

Wie oben gezeigt, ist der Zeitpunkt des Betretens des Raums ein Datensatz, und der Zeitpunkt des Verlassens ist ein Datensatz. Die Zeitspanne, in der sich der Benutzer im Raum aufhält, ist unterschiedlich Array-Form, Datenbank Der gespeicherte Datensatz sieht so aus
['id'=>1,'uid'=>22,'stauts'=>'leave','time'=>1415947332]
['id '=>2,'uid'=>22,'stauts'=>'Enter','time'=>1415947333]
['id'=>3,'uid '=> 22,'stauts'=>'Leave','time'=>1415997332]
['id'=>4,'uid'=>22,'stauts'=> 'Enter', 'time'=>1416947333]
['id'=>6,'uid'=>23,'stauts'=>'Leave','time'=>1415947332]
[ 'id'=>7,'uid'=>23,'stauts'=>'Enter','time'=>1415947333]
['id'=>8, 'uid'= >23,'stauts'=>'Leave','time'=>1415997332]
['id'=>9,'uid'=>23,'stauts'= >'Enter ','time'=>1416947333]
...

<code>$data=[
    [0]=>[
        'begin_time'=>第一个进入时间,
        'end_time'=>第一个出去时间,
    ],
    [1]=>[
        'begin_time'=>第二个进入时间,
        'end_time'=>第二个出去时间,
    ],
    [2]=>[
        'begin_time'=>第三个进入时间,
        'end_time'=>第三个进出去时间,
    ],
    [3]=>[
        'begin_time'=>第四个进入时间,
        'end_time'=>第四个进出去时间,
    ]

.....
</code>
Nach dem Login kopieren
Nach dem Login kopieren

]

<code><?php
$data = [];
$status = ['离开'=>'end_time','进入'=>'begin_time'];
$results = [
['id'=>1,'uid'=>22,'status'=>'离开','time'=>1415947332],
['id'=>2,'uid'=>22,'status'=>'进入','time'=>1415947333],
['id'=>3,'uid'=>22,'status'=>'离开','time'=>1415997332],
['id'=>4,'uid'=>22,'status'=>'进入','time'=>1416947333],
['id'=>6,'uid'=>23,'status'=>'离开','time'=>1415947332],
['id'=>7,'uid'=>23,'status'=>'进入','time'=>1415947333],
['id'=>8,'uid'=>23,'status'=>'离开','time'=>1415997332],
['id'=>9,'uid'=>23,'status'=>'进入','time'=>1416947333],
];
foreach($results as $result){
    if(!isset($data[$result['uid']])){
        $data[$result['uid']]=[];
    }
    $data[$result['uid']] += [$status[$result['status']]=>$result['time']];
}
print_r($data);
$data = array_values($data);
print_r($data);</code>
Nach dem Login kopieren

Sie können das Array in einer Schleife ausführen und das neue Array speichert die Ausgangs- und Eintrittszeiten mit der ID als Schlüssel. Entfernen Sie schließlich den Schlüssel aus dem neuen Array, um das gewünschte Format zu erhalten. Dafür müssen aber alle Daten abgefragt werden

<code><?php
$data = ['id'=>1,'stauts'=>'离开','time'=>1415947332],['id'=>1,'stauts'=>'进入','time'=>1415947333];    //源数据
$result = array();
foreach($data as $tmp){
    isset($result[$tmp['id']]) or $result[$tmp['id']] = array();
    switch($tmp['status']){
        case '进入' : 
            $result[$tmp['id']]['begin_time'] = $tmp['time'];
            break;
         case '离开' : 
            $result[$tmp['id']]['end_time'] = $tmp['time'];
            break;
    }
}
print_r($result);</code>
Nach dem Login kopieren

<code><?php
$results = [
['id'=>1,'uid'=>22,'status'=>'离开','time'=>1415947332],
['id'=>2,'uid'=>22,'status'=>'进入','time'=>1415947333],
['id'=>3,'uid'=>22,'status'=>'离开','time'=>1415997332],
['id'=>4,'uid'=>22,'status'=>'进入','time'=>1416947333],
['id'=>6,'uid'=>23,'status'=>'离开','time'=>1415947332],
['id'=>7,'uid'=>23,'status'=>'进入','time'=>1415947333],
['id'=>8,'uid'=>23,'status'=>'离开','time'=>1415997332],
['id'=>9,'uid'=>23,'status'=>'进入','time'=>1416947333],
];
$data=array();
array_sort($results,'time','asc');
foreach($results as $res){
    if($res['status']=='进入'){
        foreach($results as $res1){
            if($res1['status']=='离开' && $res['time']<$res1['time']){
                    $data[]=array('begin_time'=>$res['time'],
                    'end_time'=>$res1['time'],);
                       break;
            }
        }
    }
}
var_dump($data);
</code>
Nach dem Login kopieren

Die allgemeine Idee sollte so aussehen. Diese mehreren Schleifen sind zeitaufwändig und sehr langsam, wenn viele Daten vorhanden sind. Es gibt optimiertere Methoden, z. B. das Löschen der zweiten Schleifenebene und das anschließende Deaktivieren Nach dem Abgleich mit einer bestimmten Spalte erfordert dies natürlich die Trennung des Arrays der Schleife der zweiten Ebene vom Array der ersten Ebene

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!