0

角括弧構文を使用array_pushしてタイムスタンプと値を2次元配列に追加するにはどうすればよいですか?

それぞれがタイムスタンプと関連する値を持つ行をmysqlデータベースから正常に取得しました。結果を取得しながら、次のようにこれらの時間と値を配列に追加します。

while($row=mysqli_fetch_array($r, MYSQLI_ASSOC)){   
$q1_array[$i][0]= $row["time"];             
$q1_array[$i][1]= $row["val"]; // the value ("val") will either be 1 or 0 (ON or OFF)
$i++;
}

最終的な配列に偶数の要素(30分の時間間隔内にある)を含める必要があるので、それをテストします。

LAST配列要素のタイムスタンプと関連する値が。の場合1、配列の最後に、終了する30分タイムスタンプと。を追加します0

if ($q1_array[sizeof($q1_array)-1][1] == 1){ 
//here I want to append a timestamp and value                       
}

一方、FIRST要素に値が関連付けられたタイムスタンプがある場合は1、配列の先頭に開始30分タイムスタンプと。を追加します0

else if ($q1_array[0][1]== 1){ 
//here I want to append a timestamp and value
}

本当に助けていただければ幸いです!ありがとうございました!

4

2 に答える 2

0

特定の質問について:

//process first element
if($q1_array[0][1] == 1){
    $time = roundTime($q1_array[0][0], 'start');
    $newElement = array( $time, 0 );
    array_unshift($q1_array, $newElement);
}

//process last element
$len = count($q1_array) - 1;
if($q1_array[$len][1] == 1){
    $time = roundTime($q1_array[$len][0], 'end');
    $newElement = array( $time, 0 );
    array_push($q1_array, $newElement);
}

//rounding function
//$timeIn = unix timestamp, $direction = 'start' or 'end'
function roundTime($timeIn , $direction){
    $tUnit = 1800; //seconds in half-hour
    if ($direction == 'start'){
        $output = floor($timeIn / $tUnit) * $tUnit;
    } else {
        $output = ceil($timeIn / $tUnit) * $tUnit;
    }
    return $output;
}

これは UNIX タイムスタンプ形式で機能します。MySQL の datetime を使用している場合は、それに応じて変換する必要があります。

于 2012-08-11T14:48:34.193 に答える
0

配列の最後に新しい行を追加するには、次のように記述します。

$new_row = array($timestamp, 0);
$q1_array[] = array($timestamp, 0);

配列の先頭に挿入するには、次を使用しますarray_splice

array_splice($q1_array, 0, 0, $new_row);
于 2012-08-11T05:42:17.777 に答える