Должен ли я хранить результат функции в массиве?

У меня есть такая функция:

function time_elapsed_string($ptime) { $date_time = strtotime("1348-10-10 04:30:01") + $ptime; $year = date("Y",$date_time); $month = date("m",$date_time); $day = date("d",$date_time); $time = date("H:i:s",$date_time); $etime = time() - $ptime + 1; $a = array( 31536000 => 'year', 2592000 => 'month', 86400 => 'day', 3600 => 'hour', 60 => 'minute', 1 => 'second' ); foreach ($a as $secs => $str) { $d = $etime / $secs; if ($d >= 1) { $r = round($d); // EX: return array('date' => $day.'-'.$month.'-'.$year, // 2016-02-20 'time' => $time, // 03:30:04 'difference' => $r . ' ' . $str . ' ago' // 2 month ago ); } } } 

И я использую его вот так:

 $ptime = 1470692661; $html = '<span title="date: '.time_elapsed_string($ptime)['date'].' time: '.time_elapsed_string($ptime)['time'].'">in '.time_elapsed_string($ptime)['difference'].'<span>'; 

Как вы видите, я использую результат этой функции следующим образом:

 time_elapsed_string($ptime)['date'] ime_elapsed_string($ptime)['time'] time_elapsed_string($ptime)['difference'] 

Фактически я называю эту функцию каждый раз, когда мне нужен один из ее результатов. Это правильно? Или я должен его вызвать один раз и сохранить в массиве?

Примечание. Мой код также работает.

Время отсчета, прошедшее с той или иной даты / времени, как это, является mauvais ton .

DateTime доступен с PHP 5.2.0, а тонны людей недооценивают его. Почему бы вам не использовать это вместо loop s и if s?

 $create_time = "2016-08-02 12:35:04"; $current_time="2016-08-02 16:16:02"; $dtCurrent = DateTime::createFromFormat('Ymd H:i:s', $current_time); // to use current timestamp, use the following: //$dtCurrent = new DateTime(); $dtCreate = DateTime::createFromFormat('Ymd H:i:s', $create_time); $diff = $dtCurrent->diff($dtCreate); 

Теперь вы можете отформатировать результат, но хотите:

 $interval = $diff->format("%h hours %i minutes %s seconds"); 

Это даст чистые 3 hours 40 minutes 58 seconds без каких-либо массивов, что лучше.

ОБНОВИТЬ

Существует общее решение для получения часов / минут / секунд через регулярное выражение:

 $interval = $diff->format("%y years %m months %d days %h hours %i minutes %s seconds"); // now remove zero values $interval = preg_replace('/(^0| 0) (years|months|days|hours|minutes|seconds)/', '', $interval); 

ОБНОВЛЕНИЕ 2

На ваш комментарий:

Послушайте, я хочу использовать ваш подход .. но я действительно не могу его реализовать .. На самом деле мне нужны три вещи: time , date , difference ..! Но ваш подход не дает мне их.

Ну, мы уже знаем, как получить разницу, это переменная $interval описанная выше.

Чтобы получить время и дату, вы можете получить его из переменной $dtCreate , опять же, используя формат:

 $time = $dtCreate->format('H:i:s'); $date = $dtCreate->format('dm-Y'); 

Это не проблема.

Да – сохранить результат вызова функции time_elapsed_string($ptime) в массиве, а затем использовать это для доступа к вашим результатам. Вы теряете процессорные циклы в противном случае!

 // call it once $result = time_elapsed_string($ptime); // then use: $result['date']; $result['time']; $result['difference'];