Как я могу заставить последние целые числа времени l oop вести себя по-другому в PHP? - PullRequest
0 голосов
/ 29 марта 2020

Приведенный ниже код перебирает переменную $count и увеличивается до тех пор, пока она меньше 14. Нечетные числа записываются словами, а четные числа - числами, разделенными запятыми.

Я хочу последний номер в l oop (14), заканчивающийся точкой (.) вместо запятой (,), как мне это сделать?

Код:

<?php
       $count = 0;
       while ($count<=14){
         if ($count&1) {
           $numword = new NumberFormatter("en", NumberFormatter::SPELLOUT);
           echo $numword->format($count).", ";
       } elseif ($count%2==0) {
            echo "{$count}, ";
        } else {
          echo "{$count}, ";
        }
        $count++;
       }
       ?>

Выход:

0, one, 2, three, 4, five, 6, seven, 8, nine, 10, eleven, 12, thirteen, 14,

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

У вас есть несколько вариантов. Во-первых, создайте строку вывода и добавьте к ней, а не echo в l oop. Затем trim завершающая запятая и пробел и добавьте .:

$count = 0;
$output = '';
while ($count<=14){
    if ($count&1) {
        $numword = new NumberFormatter("en", NumberFormatter::SPELLOUT);
        $output .= $numword->format($count).", ";
    } else {
        $output .= "{$count}, ";
    }
    $count++;
}
echo trim($output, ', ') . ".";

Другой вариант - записать каждый элемент в массив, а затем implode это, добавляя точку в конце:

$count = 0;
$output = array();
while ($count<=14){
    if ($count&1) {
        $numword = new NumberFormatter("en", NumberFormatter::SPELLOUT);
        $output[] = $numword->format($count);
    } else {
        $output[] = $count;
    }
    $count++;
}
echo implode(', ', $output) . ".\n";

Ваш третий вариант (минимальные изменения в вашем коде) - вывести разделитель, зависящий от значения $count:

$count = 0;
while ($count <= 14){
    if ($count&1) {
        $numword = new NumberFormatter("en", NumberFormatter::SPELLOUT);
        echo $numword->format($count);
    } else {
        echo $count;
    }
    echo ($count < 14) ? ', ' : '.';
    $count++;
}

Во всех случаях вывод:

0, one, 2, three, 4, five, 6, seven, 8, nine, 10, eleven, 12, thirteen, 14.

Демонстрация на 3v4l.org

0 голосов
/ 29 марта 2020

Мое решение -

<?php
$count = 0;
$string = '';
while ($count <= 14) {
    if ($count & 1) {
        $numword = new NumberFormatter("en", NumberFormatter::SPELLOUT);
        $string .= $numword->format($count) . ", ";
    } elseif ($count % 2 == 0) {
        $string .= "{$count}, ";
    } else {
        $string .= "{$count}, ";
    }
    $count++;
}
echo substr($string, 0, -2).'.';

надеюсь, эта помощь:)

...