Как отредактировать implode, чтобы он объединял значения с двумя строками?

В функции ниже возможный вывод может быть

1 day and 2 hours and 34 minutes

Мой вопрос в том, как мне отредактировать implode, чтобы он выводил

1 day, 2 houts and 34 minutes

это моя функция

function time_difference($endtime){
    $hours = (int)date("G",$endtime);
    $mins = (int)date("i",$endtime);

    // join the values
    $diff = implode(' and ', $diff);

    if (($hours == 0 ) && ($mins == 0)) {
        $diff = "few seconds ago";
    }
    return $diff;
}

person EnexoOnoma    schedule 30.09.2011    source источник


Ответы (3)


Я бы сделал что-то вроде:

if ($days) {
    $diff .= "$days day";
    $diff .= $days > 1 ? "s" : "";
}
if ($hours) {
    $diff .= $diff ? ", " : "";
    $diff .= "$hours hour";
    $diff .= $hours > 1 ? "s" : "";
}
if ($mins) {
    $diff .= $diff ? " and " : "";
    $diff .= "$mins minute";
    $diff .= $mins > 1 ? "s" : "";
}
person Toto    schedule 30.09.2011

Что-то вроде этого?

function implodeEx($glue, $pieces, $glueEx = null)
{
    if ($glueEx === null)
        return implode($glue, $pieces);
    $c = count($pieces);
    if ($c <= 2)
        return implode($glueEx, $pieces);

    $lastPiece = array_pop($pieces);
    return implode($glue, array_splice($pieces, 0, $c - 1)) . $glueEx . $lastPiece;
}

$a = array('a', 'b', 'c', 'd', 'e');
echo implodeEx(',', $a, ' and ');
person GolezTrol    schedule 30.09.2011
comment
Я изменил это $diff = implode(' and ', $diff); на $diff = implodeEX(' and ', $diff);, но ничего не изменилось - person EnexoOnoma; 30.09.2011
comment
@mtopia Вы пробовали смотреть на пример GolezTrol, как он это называет? Вот оно: implodeEx(',', $a, ' and ') - person kapa; 30.09.2011

Есть много мест для функций x-time-ago. здесь два в PHP. Вот один на Javascript.

person CamelCamelCamel    schedule 30.09.2011
comment
Спасибо, но я хочу придерживаться того, что у меня есть. (Я пробовал оба PHP, ни один не работал у меня) - person EnexoOnoma; 30.09.2011