0

エラーを無効にすると、この機能は正常に機能します。しかし、私はそれらを解決しなければなりません。エラーを有効にしたところ、次のエラーが見つかりました。

注意: 未定義の変数: 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; }
}

この関数の実行は非常に遅いため、これらのエラーを解決する必要があります。この Web サイトの他のページや他のフォーラムで提供されている解決策を試しましたが、何も役に立ちませんでした。より少ないリソースを消費する優れたソリューションを提供してください。
これに対する解決策が必要です。すべてのエントリには時間がかかるためです。

これは私の最初の質問です、私は初心者です、助けてください。ありがとうございました。

4

2 に答える 2

2

あなたが$retvalどこでも初期化しているのを見ることができませんでした。$retval = ''その値に基づいて、何かを追加する前に、次のようなものを用意する必要があります。

他のエラーについては、 phpJavaを間違えました。count($strarr)PHPでは、代わりに配列の長さを取得します$strarr.length


代わりに 更新

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

あなたは単に使用することができます

$retval = $time.' ';
于 2012-06-25T08:36:46.860 に答える
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 .)
于 2012-06-25T11:45:24.643 に答える