0

如何使用方括号语法向二维数组array_push添加时间戳和值?

我成功地获得了行,每行都有一个时间戳和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,我想在数组末尾附加结束半小时时间戳以及0.

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

另一方面,如果 FIRST 元素具有关联值为 的时间戳1,我想在数组的开头附加起始半小时时间戳以及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 日期时间,您需要进行相应的转换。

于 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 回答