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>
]
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>
]
<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>
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>
<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>
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