严格的标准错误?

时间:2013-12-28 12:19:48

标签: php

以下代码在前一段时间内正常运行,但是,当我现在尝试使用它时,它表示此行中存在错误:

 $date1 = new DateTime(array_shift(array_values($array_of_dates)));

错误说:

Strict Standards: Only variables should be passed by reference in /home/...

以下是我的代码:

public function get_user_weeks($user_id,$getdays = NULL,$before_num_days = NULL) {

$weeks_between =0;
$pgql = mysql_query("SELECT at_time FROM users WHERE track_id='$user_id' ORDER BY at_time ASC");
$array_of_dates = array();
while ($row = mysql_fetch_array($pgql, MYSQL_ASSOC)) {
    $array_of_dates[] = $row['at_time'];
}

$date1 = new DateTime(array_shift(array_values($array_of_dates)));
 if ($before_num_days==NULL) {
$date2 = new DateTime(date("Y-m-d h:m:s")); }
else {



    $date2 = date("Y-m-d h:m:s");
    $date2 = strtotime('+'.$before_num_days.' day', strtotime($date2));
    $date2 = date('Y-m-d h:m:s',$date2);
    $date2 = new DateTime($date2);

    }
$interval = $date1->diff($date2);
if(NULL == $getdays) {
$weeks_between = (($interval->d) + (30.5 * $interval->m) + (365 * $interval->y))/7; }
else {
$weeks_between = (($interval->d) + (30.5 * $interval->m) + (365 * $interval->y));
    }

return $weeks_between;
}

3 个答案:

答案 0 :(得分:3)

它由array_shift()触发,因为它需要一个变量而不是一个值作为参数。

$values = array_values($array_of_dates);
$value  = array_shift($values);
$date1  = new DateTime($value);

另外,请注意MySQL扩展已被正式弃用。请改用MySQLiPDO

答案 1 :(得分:1)

array_shift需要参考,因此您需要更改代码:

$values = array_values($array_of_dates);
$values = array_shift($values);
$date1 = new DateTime($values);

答案 2 :(得分:0)

这是因为返回了引用...在这种情况下,将其分配给变量并克服此问题。

你可以这样做......

$date1 = new DateTime($dt=array_shift(array_values($array_of_dates))); //Check the variable $dt ;)