Помогите укоротить и оптимизировать 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 день назад
- Был в сети 3 дня назад
- Был в сети 10 дней назад
Готов даже заплатить за работу. Можем списаться в тг или вк @nikita17cm