Использование функций и циклов while в PHP - PullRequest
0 голосов
/ 27 января 2012

Хорошо, я понимаю, что функцию можно создать только один раз, но мне нужно использовать вывод значения из массива, чтобы выполнить функцию 3 раза на одной и той же странице. Я настроил его так, как я думал, что он должен работать, но php просто создает пустую страницу. Вот оригинальная функция до того, как я ее использовал:

function time_ago($date,$granularity=2) {
    $date = strtotime($date);
    $difference = time() - $date;
    $periods = array('decade' => 315360000,
        'year' => 31536000,
        'month' => 2628000,
        'week' => 604800, 
        'day' => 86400,
        'hour' => 3600,
        'minute' => 60,
        'second' => 1);
    if ($difference < 5) { // less than 5 seconds ago, let's say "just now"
        $retval = "posted just now";
        return $retval;
    } else {                            
        foreach ($periods as $key => $value) {
            if ($difference >= $value) {
                $time = floor($difference/$value);
                $difference %= $value;
                $retval .= ($retval ? ' ' : '').$time.' ';
                $retval .= (($time > 1) ? $key.'s' : $key);
                $granularity--;
            }
            if ($granularity == '0') { break; }
        }
        return ' posted '.$retval.' ago';      
    }
}

тогда вот мой основной цикл, предназначенный для извлечения твитов из базы данных и преобразования метки времени в unix time:

$sql = $db->select("SELECT * FROM `Twitter_tweets` ORDER BY `id` DESC LIMIT 0, 3");

while($res = $db->get_row($sql))
        {
            $p .= '
                <li>
                    <span class="tweetContent">'.display_clean($res['tweet']).'</span>
                    <br />
                    <span class="tweetDate">';

            $timeSince = ceil(abs(display_clean($res['created_at']) - time()) / 86400);

            $p .= ''.$timeSince.'</span>

                </li>
            ';
        }

Идея следующего раздела кода состоит в том, чтобы взять дату в базе данных, преобразовать ее в unixtime, найти разницу между ними, а затем вывести ее как «опубликовано x минут назад», в виде facebook / twitter и т. Д.

//loop section converting date to 'posted x time ago'


$sql = $db->select("SELECT * FROM `Twitter_tweets` ORDER BY `id` DESC LIMIT 0, 3");

function time_ago($date,$granularity=2) {
    $date = strtotime($date);
    $difference = time() - $date;
    $periods = array('decade' => 315360000,
        'year' => 31536000,
        'month' => 2628000,
        'week' => 604800, 
        'day' => 86400,
        'hour' => 3600,
        'minute' => 60,
        'second' => 1);
}

    while($res = $db->get_row($sql))
        {
            $p .= '
                <li>
                    <span class="tweetContent">'.display_clean($res['tweet']).'</span>
                    <br />
                    <span class="tweetDate">';

            $date = display_clean($res['created_at']);

            if ($difference < 5) { // less than 5 seconds ago, let's say "just now"
                $retval = "posted just now";
                return $retval;
            } else {                            
                foreach ($periods as $key => $value) {
                    if ($difference >= $value) {
                        $time = floor($difference/$value);
                        $difference %= $value;
                        $retval .= ($retval ? ' ' : '').$time.' ';
                        $retval .= (($time > 1) ? $key.'s' : $key);
                        $granularity--;
                    }
                if ($granularity == '0') { break; }
                }
                return ' posted '.$retval.' ago';      
            }



            $p .= '</span>

                </li>
            ';
        }



//end loop

Может кто-нибудь указать, где я иду не так? Я в порядке с использованием PHP, но я не эксперт в любом случае. Я просто не могу понять, где я ошибаюсь и вырываю пустой файл.

Ответы [ 2 ]

0 голосов
/ 27 января 2012

Я не совсем понимаю ваш код, но думаю, что в этом есть основная синтаксическая ошибка.Если это была функция, возможно, вы хотели этого:

function time_ago($date,$granularity=2) {
    $sql = $db->select("SELECT * FROM `Twitter_tweets` ORDER BY `id` DESC LIMIT 0, 3");
    $date = strtotime($date);
    $difference = time() - $date;
    $periods = array('decade' => 315360000,
        'year' => 31536000,
        'month' => 2628000,
        'week' => 604800, 
        'day' => 86400,
        'hour' => 3600,
        'minute' => 60,
        'second' => 1); 
    while($res = $db->get_row($sql))
        {
            $p .= '
                <li>
                    <span class="tweetContent">'.display_clean($res['tweet']).'</span>
                    <br />
                    <span class="tweetDate">';

            $date = display_clean($res['created_at']);

            if ($difference < 5) { // less than 5 seconds ago, let's say "just now"
                $retval = "posted just now";
                return $retval;
            } else {                            
                foreach ($periods as $key => $value) {
                    if ($difference >= $value) {
                        $time = floor($difference/$value);
                        $difference %= $value;
                        $retval .= ($retval ? ' ' : '').$time.' ';
                        $retval .= (($time > 1) ? $key.'s' : $key);
                        $granularity--;
                    }
                if ($granularity == '0') { break; }
                }
                return ' posted '.$retval.' ago';      
            }
            $p .= '</span>

                </li>
            ';
        }
}

Я не проверял это, даже если бы хотел, я не смог.Может быть, это поможет.

0 голосов
/ 27 января 2012

Почему бы просто не вызвать исходную функцию и распечатать результат?

$sql = $db->select("SELECT * FROM `Twitter_tweets` ORDER BY `id` DESC LIMIT 0, 3");

while($res = $db->get_row($sql))
        {
            $p .= '
                <li>
                    <span class="tweetContent">'.display_clean($res['tweet']).'</span>
                    <br />
                    <span class="tweetDate">';

            $p .= ''.time_ago($res['created_at']).'</span>

                </li>
            ';
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...