Search code examples
phpfizzbuzz

How to prevent surplus comma at the beginning of a concatenated string


I am trying to solve the FizzBuzz question in PHP (in this case using 'ApaBole' instead).

Counting from 1 to 100, numbers divisible by 3 should output 'Apa', numbers divisible by 5 should output 'Bole', and numbers divisible by both should output 'ApaBole'. All other numbers should output themselves.

Desired Result

1, 2, Apa, 4, Bole, Apa, 7, 8, Apa, Bole, 11, Apa, 13, 14, ApaBole, 16, 17, Apa, 19, Bole, Apa, 22, 23, Apa, Bole, 26, Apa, 28, 29, ApaBole, 31, 32, Apa, 34, Bole, Apa, 37, 38, Apa, Bole, 41, Apa, 43, 44, ApaBole, 46, 47, Apa, 49, Bole, Apa, 52, 53, Apa, Bole, 56, Apa, 58, 59, ApaBole, 61, 62, Apa, 64, Bole, Apa, 67, 68, Apa, Bole, 71, Apa, 73, 74, ApaBole, 76, 77, Apa, 79, Bole, Apa, 82, 83, Apa, Bole, 86, Apa, 88, 89, ApaBole, 91, 92, Apa, 94, Bole, Apa, 97, 98, Apa, Bole

My Attempt

for ($i= 1; $i <= 100; $i++)
{
    if($i % 15 == 0){
        echo ", ApaBole";
    } elseif($i % 3 == 0){
        echo ", Apa";
    } elseif($i % 5 == 0){
        echo ", Bole";
    } else{
        // rtrim($i, ", ");
        echo ', '.$i;
    }
}

Output

, 1, 2, Apa, 4, Bole, Apa, 7, 8, Apa, Bole, 11, Apa, 13, 14, ApaBole, 16, 17, Apa, 19, Bole, Apa, 22, 23, Apa, Bole, 26, Apa, 28, 29, ApaBole, 31, 32, Apa, 34, Bole, Apa, 37, 38, Apa, Bole, 41, Apa, 43, 44, ApaBole, 46, 47, Apa, 49, Bole, Apa, 52, 53, Apa, Bole, 56, Apa, 58, 59, ApaBole, 61, 62, Apa, 64, Bole, Apa, 67, 68, Apa, Bole, 71, Apa, 73, 74, ApaBole, 76, 77, Apa, 79, Bole, Apa, 82, 83, Apa, Bole, 86, Apa, 88, 89, ApaBole, 91, 92, Apa, 94, Bole, Apa, 97, 98, Apa, Bole%

How do I remove the first , ?


Solution

  • There's a few different ways you can achieve this. One being removing the first element in the string as suggested by @BadHorsie, but you can also use a check in the part that generates the first string, if you are at the first iteration or not.

    <?php
    
    for ($i= 1; $i <= 100; $i++) {
        if ($i % 15 == 0) {
            echo ", ApaBole";
        } elseif ($i % 3 == 0) {
            echo ", Apa";
        } elseif ($i % 5 == 0) {
            echo ", Bole";
        } else {
            echo ($i == 1 ? '' : ', ').$i;
        }
    }
    

    Another way could be to store all the values in an array, and once you have all the values, implode() it with your desired delimiter.

    $values = [];
    for ($i= 1; $i <= 100; $i++) {
        if ($i % 15 == 0) {
            $values[] = "ApaBole";
        } elseif ($i % 3 == 0) {
            $values[] = "Apa";
        } elseif ($i % 5 == 0) {
            $values[] = "Bole";
        } else {
            $values[] = $i;
        }
    }
    echo implode(", ", $values);
    

    Another could be to store all your values in a string-variable, then trim the first comma before you output it all.

    $output = '';
    for ($i= 1; $i <= 100; $i++) {
        if ($i % 15 == 0) {
            $output .= ", ApaBole";
        } elseif ($i % 3 == 0) {
            $output .= ", Apa";
        } elseif ($i % 5 == 0) {
            $output .= ", Bole";
        } else {
            $output .= ', '.$i;
        }
    }
    echo ltrim($output, ', ');