2012-06-25 3 views
0

Эта функция отлично работает, если я отключил ошибки. Но я должен их решить. Так я включил ошибки и нашел следующие ошибки:Ошибки: неопределенная переменная: retval и неопределенная постоянная длина - предполагаемая длина '

Notice: Undefined variable: retval in /home/content/79/9482579/html/gamelinkexchange.com/all/function.php on line 20

Notice: Use of undefined constant length - assumed 'length' in /home/content/79/9482579/html/gamelinkexchange.com/all/function.php on line 55

Вот моя функция:

function time_ago($date,$granularity=2) { 
date_default_timezone_set('Asia/Calcutta'); 
    $date = strtotime($date); 
    $difference = time() - $date; 
    $periods = array('decade' => 315360000, 
     'year' => 31536000, 
     'month' => 2628000, 
     'week' => 604800, 
     'day' => 86400, 
     'hour' => 3600, 
     'minute' => 60, 
     'second' => 1); 
foreach ($periods as $key => $value) { 
     if ($difference >= $value) { 
      $time = floor($difference/$value); 
      $difference %= $value; 
      $retval .= ($retval ? ' ' : '').$time.' '; /*error*/ 
      $retval .= (($time > 1) ? $key.'s' : $key); 
      $granularity--; 
     } 
     if ($granularity == '0') { break; } 
    } 
    return $retval.' ago';  
} 
function gethours($str) 
{ 
    if(strpos($str, "decade")) 
    { 
     return 0; 
    } 
    else if(strpos($str, "year")) 
    { 
     return 0; 
    } 
    else if(strpos($str, "month")) 
    { 
     return 0; 
    } 
    else if(strpos($str, "week")) 
    { 
     return 0; 
    } 
    else if(strpos($str, "day")) 
    { 
     return 0; 
    } 
    else if(strpos($str, "hours")) 
    { 
     $strarr= explode(" ",$str); 
     $j=0; /*error*/ 
     for($i=0;$i<$strarr.length;$i++) 
     { 
      if($strarr[$i]=="hours") 
      { 
       $j=$i-1; 
      } 
     } 
     return $strarr[$j]; 
    } 
else { return 1; } 
} 

Эта функция работает очень медленно, поэтому мне нужно, чтобы решить эти ошибки. Я пробовал решение, представленное на других страницах этого сайта и других форумах, но ничего не помогло. Пожалуйста, предоставьте хорошее решение, которое потребляет меньше ресурсов.
Мне нужно решение. Потому что каждая запись должна проходить время.

Это мой первый вопрос, я новичок, пожалуйста, помогите. Спасибо.

+2

Это действительно не "делать свою работу для меня" сайта, и этот вопрос, похоже, особенно подходит для того, чтобы закончить вашу работу за вас, а не задавать вопрос, который будет полезен будущим посетителям. – cdhowie

ответ

1

Я не видел, чтобы вы инициализировали ваш $retval в любом месте. Возможно, у вас должно быть что-то вроде $retval = '', прежде чем вы начнете добавлять что-либо к нему, исходя из его значения.

О других ошибках, вы, ошибочная PHP с Java. В PHP вы получаете длину массива с count($strarr) вместо $strarr.length

Update
Вместо

$retval .= ($retval ? ' ' : '').$time.' '; 

вы могли бы просто использовать

$retval = $time.' '; 
+0

Какое значение следует использовать для инициализации $ retval = ''. или использовать его точно так же. –

+0

@Asim Просто избавьтесь от '($ retval? '': '')'. Это бесполезно, так как '$ retval' на данный момент не определен. – deceze

+0

, поэтому я должен удалить его. что я должен использовать вместо него .. –

0

Измените строку:

$retval .= ($retval ? ' ' : '').$time.' '; /*error*/ 

Для этого:

$retval .= (isset($retval))? ' ':''; 
$retval .= $time.' '; //you shouldn't have the error on that line again -- it's because 
//the variable does not exist and you're sing it in a comparison 

Изменить эту строку ниже:

for($i=0;$i<$strarr.length;$i++) 

Для этого:

for($i=0;$i<count($strarr);$i++){....} 
//arrays in PHP cannot be used like objects (-> not .) 
+0

ошибка первой ошибки «$ retval» такая же, как «Неопределенная переменная: retval», пожалуйста, помогите , благодаря решению моей второй ошибки. –

+0

за первую ошибку: я полностью пропустил ее ... это должно быть '$ retval = (isset ($ retval))? '': ''; 'NOT' $ retval. = (Isset .......) ' –

+0

просто измените'. = 'На' = '. Дайте мне знать, если это сработает :) –