0

SQL ステートメントからいくつかの要素を取得し、それらを配列に入れています。

私がやりたいことは、配列内のこれらの要素の日付間の特定の違いを見つけて、それらを別の配列に追加することです。

データベースからの結果は次のようになります (key=>value):

array(
    "10"=>"13-02-2013 09:47:16", 
    "10"=>"13-02-2013 09:47:00", 
    "10"=>"13-02-2013 09:46:50",  
    "10"=>"13-02-2013 09:42:50", 
    "20"=>"13-02-2013 09:30:50", 
    "20"=>"13-02-2013 09:20:50", 
    "30"=>"13-02-2013 09:10:15"
);

日付の差が 60 秒未満である、同じ ID (キー) を持つ要素を見つける必要があります。たとえば、次のような出力が必要です。

array(
    "10"=>"13-02-2013 09:47:16", 
    "10"=>"13-02-2013 09:47:00", 
    "10"=>"13-02-2013 09:46:50"
);

ご協力いただきありがとうございます!

4

2 に答える 2

0

うーん、abc667 と Jon を引用しますが、日付を比較したい場合は、単純な for を使用してすべての配列をスキャンし、配列内の現在の日付と次の日付を比較できます.. $cont という変数で for を使用する場合、 cont = 1 最初の日付は $array[1] ($array[$cont]) で、2 番目の日付は $array[2] ($array[$cont+1]) です。私は簡単な例を実行しました(実行されるかどうかはわかりませんが、;P)私の例では配列が$array_datesと呼ばれているように見え、新しい配列を作成しましたが、単純です。それを for サイクルに追加します。

<?php

// example >>> $array_dates[1] = '2013-2-13 12:30:00'; 

// scan all the array with the date
for ($cont=0; $cont<count($array_dates); $cont++)
    {
    $date_1 = $array_dates[$cont];
    $date_2 = $array_dates[$cont+1];

list($data1,$His1) = explode(' ',$date_1); 
list($year1,$month1,$day1) = explode('-',$data1); 
list($hour1,$min1,$sec1) = explode(':',$His1); 

list($data2,$His2) = explode(' ',$date_2); 
list($year2,$month2,$day2) = explode('-',$data2); 
list($hour2,$min2,$sec2) = explode(':',$His2); 

$diff=mktime($hour2,$min2,$sec2,$month2,$day2,$year2)-mktime($hour1,$min1,$sec1,$month1,$day1,$year1); 

$diff = mktime($hour2, $min2,$sec2, $month2,$day2,$year2) - mktime($hour1,$min1,$sec1, $month1,$day1,$year1); 

$diff1  = floor($diff % (60*60*24)); 
$diff2  = floor($diff1 % (60*60)) ; 
$sec    = $diff2 % 60; 


echo "<br>Seconds difference from <u>$date_1</u> and <u>$date_2</u>: <em>$sec</em><br>";

} //end of the for cycle
?>

よろしくお願いします。

編集:

mktime は数値の前にゼロがあると問題が発生するため (8 進数と見なされます!)、月をフォーマットで入力する必要がありますが、php.net で日付形式を読み取ることができます。

于 2013-02-13T11:32:19.537 に答える
0

配列は、同じキーを複数回持つことはできません。すべての要素には一意のキーがあります。
この配列を読み取ろうとすると、次のように表示されます。

Array
(
[10] => 13-02-2013 09:42:50
[20] => 13-02-2013 09:20:50
[30] => 13-02-2013 09:10:15
)

キー '10' を持つすべての要素を取得する場合は、データベースからデータを取得する際に多次元配列を使用する必要があります。

$new_arr = array();
// Put database data object in place of $arr
foreach($arr as $k => $v){
    if(array_key_exists($k,$new_arr)){
        $new_arr[$k][] = $v;
    }
    else{
        $new_arr[$k] = $v;
    }
}

ここで $new_arr は次の形式になります。

$new_arr = array("10"=> array([0] => '13-02-2013 09:47:16'),
                        array([1] => '13-02-2013 09:47:00'),
                        array([2] => '13-02-2013 09:46:50'),
                 "20" => '',
                  ........
               )

そして、必要な値を選択できます。

于 2013-02-13T11:30:46.550 に答える