26
Дек
2020

Помогите укоротить и оптимизировать php код для вывода последнего онлайна

Есть такая функция. Она нужна для получения последнего онлайна пользователя. Первым параметром идёт unix время, вторым массив текстов:

function get_online($unix_online, $pattern)
{
   if ($unix_online == 0)
   {
      return $pattern['not_online'];
   }
   else
   {
      $last_update   = time() - $unix_online;
      $last_update_m = intval($last_update / 60);
      $last_update_h = intval($last_update_m / 60);
      $last_update_d = intval($last_update_h / 24);
      $last_update_у = intval($last_update_d / 365);

      if ($last_update_у == 0)
      {
         if ($last_update_d == 0)
         {
            if ($last_update_h == 0)
            {
               if ($last_update_m == 0)
               {
                  return $pattern['online'];
               }
               else
               {
                  $data_text = $pattern['mins'];
                  $data_sort = $last_update_m;
               }
            }
            else
            {
               $data_text = $pattern['hours'];
               $data_sort = $last_update_h;
            }
         }
         else
         {
            $data_text = $pattern['days'];
            $data_sort = $last_update_d;
         }
      }
      else
      {
         $data_text = $pattern['years'];
         $data_sort = $last_update_у;
      }

      if (isset($data_sort))
      {
         return str_replace('{MHDY}', $data_text, str_replace('{count}', $data_sort, $pattern['last_online']));
      }
   }
}

Пример вызова функции:

echo get_online(time() - 1234552, [
    'online' => 'Онлайн',
    'not_online' => 'Никогда не заходил на сайт',
    'last_online' => 'Был в сети {count} {MHDY} назад',
    'mins' => 'мин.',
    'hours' => 'час.',
    'days' => 'дн.',
    'years' => 'г.',
]);
//Был в сети 14 дн. назад

Нужно её как то укоротить, или хотя бы написать более правильно, потому что я понимаю, что это говнокод. Еще, если возможно, нужно сделать что бы функция понимала, в какой именно форме слово нужно выводить. То есть допустим.

  1. Был в сети 1 день назад
  2. Был в сети 3 дня назад
  3. Был в сети 10 дней назад

Готов даже заплатить за работу. Можем списаться в тг или вк @nikita17cm

Источник: https://ru.stackoverflow.com/questions/1224235/%D0%9F%D0%BE%D0%BC%D0%BE%D0%B3%D0%B8%D1%82%D0%B5-%D1%83%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%B8%D1%82%D1%8C-%D0%B8-%D0%BE%D0%BF%D1%82%D0%B8%D0%BC%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C-php-%D0%BA%D0%BE%D0%B4-%D0%B4%D0%BB%D1%8F-%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B0-%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BD%D0%B5%D0%B3%D0%BE-%D0%BE%D0%BD%D0%BB%D0%B0%D0%B9%D0%BD%D0%B0

Тебе может это понравится...

Добавить комментарий