错误:未定义的变量:retval和undefined常量长度 - 假定为'length'

时间:2012-06-25 08:31:19

标签: php undefined

如果我禁用错误,此功能正常。但我必须解决它们。 所以我启用了错误并发现了以下错误:

  

注意:未定义的变量:第20行/home/content/79/9482579/html/gamelinkexchange.com/all/function.php中的retval

     

注意:使用未定义的常量长度 - 在第55行的/home/content/79/9482579/html/gamelinkexchange.com/all/function.php中假设为“长度”

这是我的功能:

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 个答案:

答案 0 :(得分:1)

我无法看到你在任何地方初始化$retval。在开始根据其值添加任何内容之前,您应该拥有$retval = ''之类的内容。

关于其他错误,您错误地将 php Java 混为一谈。在php中,您可以使用count($strarr)而不是$strarr.length

获取数组的长度

<强>更新
而不是

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

你可以简单地使用

$retval = $time.' ';

答案 1 :(得分: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 .)