Как добавить несколько пробелов в конец строки?

#php

Вопрос:

Я пытаюсь добавить пробелы в конце слов, чтобы они выглядели выровненными по следующему слову. Я пытался str_pad , str_replace но это не сработало.

     $str = array("one", "two", "three", "four", "five", "six");

    ///with str_pad
    foreach ($str as $value) {
        if (strlen($value) <= 5) {
            $pad_str = str_pad($value, 6, " ", STR_PAD_RIGHT);
            $result = $pad_str.'bar';
            echo $result.'<br>';
        }
    }
    ///with str_replace
    foreach ($str as $value) {
        if (strlen($value) <= 5) {
            $rep_str = str_repeat(" ", max(0, 6 - strlen($value)));
            $result = $value.$rep_str.'bar';
            echo $result.'<br>';
        }
    }
 

Я хочу что-то вроде этого:

 //output I want            //output returned
one   bar                  one bar
two   bar                  two bar
three bar                  three bar
four  bar                  four bar
five  bar                  five bar
six   bar                  six bar
 

Как я могу этого достичь? Я пытался в течение нескольких часов, но не получил правильного ответа. Так что, пожалуйста, помогите.

Комментарии:

1. Оба ваших подхода работают, вы бы поняли это, если бы обернули его <pre></pre> тегом, просто HTML всегда отображает несколько пробелов как один в браузере. Вы также можете увидеть, как он работает, запустив скрипт в качестве интерфейса командной строки в терминале и используя PHP_EOL вместо '<br>'

Ответ №1:

просто найдите максимальную длину значения в массиве и соответствующим образом повторите пробел.

Нравится,

 $str = array("one", "two", "three", "four", "five", "six");
$max_len = max(array_map('strlen', $str)); // max length of value in array

echo "<pre>";

foreach ($str as $value) {
     $add_space = $max_len - strlen($value); 
     echo $value.str_repeat('amp;nbsp;', $add_space   1)."bar"; echo "<br>";
}

echo "</pre>";
 

Ответ №2:

Вы можете использовать PHP_EOL и добавлять <pre></pre> теги для отображения результата по своему усмотрению:

 <?php

 $str = array("one", "two", "three", "four", "five", "six");

echo '<pre>';    

    ///with str_pad
    foreach ($str as $value) {
        if (strlen($value) <= 5) {
            $pad_str = str_pad($value, 6, " ", STR_PAD_RIGHT);
            $result = $pad_str.'bar';
            echo $result.PHP_EOL;
        }
    }

echo '</pre>';
 

В сети

Комментарии:

1. Я запускаю скрипт на локальном хосте, и он показывает весь вывод в одной строке вместо новых строк.

2. @Mujtaba Оберните все это <pre> тегом, иначе браузер отобразит его как обычный свободный текст. Смотрите мой комментарий к вопросу, это та же проблема.

3. @Mujtaba проверьте отредактированный ответ, Матье, надеюсь, вы не возражаете, что я отредактировал ваш пост

4. Не волнуйся, я собирался это сделать @biesior

5. @biesior Спасибо тебе