#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 Спасибо тебе