Как сделать абзац в php
Для того, чтобы обернуть каждую строку с помощью функции preg_replace нам понадобится:
Текст в переменной.
Функция «preg_replace». Принцип замены аналогичен выше приведенному пункту, лишь отличается «представление» искомой части — она записывается немного по-другому!
И е забываем начать нашу замену с присоединения начала тега абзаца. И в конце закрыть тег абзаца.
Примерно похожую ситуацию мы рассматривали, когда заменяли перенос на другой тег.
Если вас интересуют подробности посмотрите про тег <br> если у вас есть мозг, то там можно разобраться и применить preg_replace уже для тега <p>
Обернуть строку в абзац с помощью -> цикла
Для того, чтобы каждый абзац обернуть в тег абзаца можно использовать цикл!
Какая разница между заменой переноса в функции и замены переноса в цикле?
Дело в том, что если ваш сайт построен по определенным правилам, то при необходимости можно настраивать форматирование. но это чуть дальше.
Каждую строку в тег абзаца в цикле.
Для того, чтобы обернуть текст и в нём каждую строку в тег абзаца нам понадобится:
Первым шагом, нам нужно превратить текст в массив, для этого нам нужна функция explode ..
Далее. возьмем цикл и в каждом витке оборачиваем абзац в тег абзаца.
И последнее. возвращаем массив в текст. Здесь возможны два варианта :
1). Превращение ячеек массива сразу внутри цикла в текст.
2). Либо — оборачиваем ячейку, а потому уже массив возвращаем в текст(строку) с помощью implode. Рассмотрим оба варианта.
Цикл для оборачивания строки в абзац:
Первый вариант оборачивание каждой строки в абзац в цикле, сразу будем возвращать обернутую строку в новую переменную «$NEW_TEXT».
Вы должным были заметить перед заком равно точку, что означает приклеивание следующей строки следом за предыдущей:
В конце строки не забываем вернуть перенос строки. ведь explode убил перенос в начальном тексте.
$array_text = explode("\n" , $example);
for ($i=0; $i < count($array_text) ; $i++)
Второй вариант — каждую строку в тег абзаца:
И далее перед нами. задачка : «Найди 3 отличия. «
$array_text = explode("\n" , $example);
for ($i=0; $i < count($array_text) ; $i++)
$example = implode("\n" , $array_text );
Это довольно обширная тема, но взгляните на некоторые особенности данной страницы. например:
Кнопка скопировать ссылку.
Если бы на данной странице были бы картинки(как на этой), то alt и title у них уникальные в зависимости от абзаца. Это все форматирование происходит в цикле! Php замечательная вещь!
Форум PHP программистов ► PHP практикум ► PHP для начинающих
Сообщений: 142
Пользователь №: 38937
На форуме:
Карма:
Всем привет, у меня есть такая строка:
Мне кажется что это не очень хорошо выглядит, может сформулироваться впечалтелния быдло кода, есть какие то более корректные альтернативы для отступов в php коде?
![]()
Сообщений: 6382
Пользователь №: 35718
На форуме:
Карма: 206
![]()
Сообщений: 142
Пользователь №: 38937
На форуме:
Карма:
![]()
Сообщений: 6382
Пользователь №: 35718
На форуме:
Карма: 206
![]()
Сообщений: 142
Пользователь №: 38937
На форуме:
Карма:
![]()
Сообщений: 6382
Пользователь №: 35718
На форуме:
Карма: 206
![]()

Профиль
Группа: Сын полка
Сообщений: 2537
Пользователь №: 38654
На форуме:
Карма: 49
![]()

Сообщений: 17419
Пользователь №: 6543
На форуме:
Карма: 327
Трезвый :
12 лет, 5 месяцев, 14 дней
| Цитата |
| Ну да, но я имею в виду, есть ли именно php способ, без html. |
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.
Нужно уважать мнение оппонета. Ведь заблуждаться — его святое право.
Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

![]()

Профиль
Группа: Сын полка
Сообщений: 2537
Пользователь №: 38654
На форуме:
Карма: 49
![]()

418 I'm a teapot
Сообщений: 647
Пользователь №: 28374
На форуме:
Карма: 23
![]()
Сообщений: 6382
Пользователь №: 35718
На форуме:
Карма: 206
![]()
Профиль
Журнал
Группа: ★ЛжеЭксперт★
Сообщений: 3900
Пользователь №: 21196
На форуме:
Карма: 88
| Цитата |
| есть какие то более корректные альтернативы для отступов в php коде |
В php нет ни одного способа сделать перенос не средствами html/css, потому, что работу php видно только через html — он создан, чтоб его делать .
Можно как-то поиграть с margin или padding, но это уже извращение. Как уже сказали, тут наиболее приемлимый вариант <p>. Обычно такой кусок заварачивают в div с классом, чтоб потом через css задавать свойства.
str_pad
This function returns the string string padded on the left, the right, or both sides to the specified padding length. If the optional argument pad_string is not supplied, the string is padded with spaces, otherwise it is padded with characters from pad_string up to the limit.
Parameters
The input string.
If the value of length is negative, less than, or equal to the length of the input string, no padding takes place, and string will be returned.
Note:
The pad_string may be truncated if the required number of padding characters can't be evenly divided by the pad_string 's length.
Optional argument pad_type can be STR_PAD_RIGHT , STR_PAD_LEFT , or STR_PAD_BOTH . If pad_type is not specified it is assumed to be STR_PAD_RIGHT .
Return Values
Returns the padded string.
Examples
Example #1 str_pad() example
User Contributed Notes 28 notes
since the default pad_type is STR_PAD_RIGHT. using STR_PAD_BOTH were always favor in the right pad if the required number of padding characters can’t be evenly divided.
echo str_pad ( «input» , 10 , «pp» , STR_PAD_BOTH ); // ppinputppp
echo str_pad ( «input» , 6 , «p» , STR_PAD_BOTH ); // inputp
echo str_pad ( «input» , 8 , «p» , STR_PAD_BOTH ); //pinputpp
Incrementing or decrementing numbers in PHP is easy with the ++ and — operators but it can be difficult to set the precision of the numbers. The str_pad() can be useful for concatenating a string to the beginning or end of the incrementing number to simulate a different precision.
Good example, we want to increment 001 to 002, 003, 004:
for($i = 1; $i <= 4; $i++) <
$numbers[] = str_pad($i, 3, ‘0’, STR_PAD_LEFT);
>
Bad example, we want to increment 001 to 002, 003, 004 but if we set $i = 001 in the for() loop to start with, 001 will be converted to 1 and the incrementing will return: 1, 2, 3, 4 etc.
A proper unicode string padder;
<?php
mb_internal_encoding ( ‘utf-8’ ); // @important
function str_pad_unicode ( $str , $pad_len , $pad_str = ‘ ‘ , $dir = STR_PAD_RIGHT ) <
$str_len = mb_strlen ( $str );
$pad_str_len = mb_strlen ( $pad_str );
if (! $str_len && ( $dir == STR_PAD_RIGHT || $dir == STR_PAD_LEFT )) <
$str_len = 1 ; // @debug
>
if (! $pad_len || ! $pad_str_len || $pad_len <= $str_len ) <
return $str ;
>
$result = null ;
$repeat = ceil ( $str_len — $pad_str_len + $pad_len );
if ( $dir == STR_PAD_RIGHT ) <
$result = $str . str_repeat ( $pad_str , $repeat );
$result = mb_substr ( $result , 0 , $pad_len );
> else if ( $dir == STR_PAD_LEFT ) <
$result = str_repeat ( $pad_str , $repeat ) . $str ;
$result = mb_substr ( $result , — $pad_len );
> else if ( $dir == STR_PAD_BOTH ) <
$length = ( $pad_len — $str_len ) / 2 ;
$repeat = ceil ( $length / $pad_str_len );
$result = mb_substr ( str_repeat ( $pad_str , $repeat ), 0 , floor ( $length ))
. $str
. mb_substr ( str_repeat ( $pad_str , $repeat ), 0 , ceil ( $length ));
>
return $result ;
>
?>
Test;
<?php
// needs ie. «test.php» file encoded in «utf-8 without bom»
$s = ‘. ‘ ;
for ( $i = 3 ; $i <= 1000 ; $i ++) <
$s1 = str_pad ( $s , $i , ‘AO’ , STR_PAD_BOTH ); // can not inculde unicode char.
$s2 = str_pad_unicode ( $s , $i , ‘ÄÖ’ , STR_PAD_BOTH );
$sl1 = strlen ( $s1 );
$sl2 = mb_strlen ( $s2 );
echo «len $sl1 : $s1 \n» ;
echo «len $sl2 : $s2 \n» ;
echo «\n» ;
if ( $sl1 != $sl2 ) die( «Fail!» );
>
?>
Output;
len 3: .
len 3: .
len 4: . A
len 4: . Ä
len 5: A. A
len 5: Ä. Ä
len 6: A. AO
len 6: Ä. ÄÖ
.
<?php
function mb_str_pad ( $str , $pad_len , $pad_str = ‘ ‘ , $dir = STR_PAD_RIGHT , $encoding = NULL )
<
$encoding = $encoding === NULL ? mb_internal_encoding () : $encoding ;
$padBefore = $dir === STR_PAD_BOTH || $dir === STR_PAD_LEFT ;
$padAfter = $dir === STR_PAD_BOTH || $dir === STR_PAD_RIGHT ;
$pad_len -= mb_strlen ( $str , $encoding );
$targetLen = $padBefore && $padAfter ? $pad_len / 2 : $pad_len ;
$strToRepeatLen = mb_strlen ( $pad_str , $encoding );
$repeatTimes = ceil ( $targetLen / $strToRepeatLen );
$repeatedString = str_repeat ( $pad_str , max ( 0 , $repeatTimes )); // safe if used with valid utf-8 strings
$before = $padBefore ? mb_substr ( $repeatedString , 0 , floor ( $targetLen ), $encoding ) : » ;
$after = $padAfter ? mb_substr ( $repeatedString , 0 , ceil ( $targetLen ), $encoding ) : » ;
return $before . $str . $after ;
>
?>
In a lot of cases you’re better off using str_repeat if you want to use something like — it repeats the entire string.
Using str_repeat, I wrote a full string pad function that should closely mimic str_pad in every other way:
<?php
function full_str_pad ( $input , $pad_length , $pad_string = » , $pad_type = 0 ) <
$str = » ;
$length = $pad_length — strlen ( $input );
if ( $length > 0 ) < // str_repeat doesn't like negatives
if ( $pad_type == STR_PAD_RIGHT ) < // STR_PAD_RIGHT == 1
$str = $input . str_repeat ( $pad_string , $length );
> elseif ( $pad_type == STR_PAD_BOTH ) < // STR_PAD_BOTH == 2
$str = str_repeat ( $pad_string , floor ( $length / 2 ));
$str .= $input ;
$str .= str_repeat ( $pad_string , ceil ( $length / 2 ));
> else < // defaults to STR_PAD_LEFT == 0
$str = str_repeat ( $pad_string , $length ). $input ;
>
> else < // if $length is negative or zero we don't need to do anything
$str = $input ;
>
return $str ;
>
$pad_me = «Test String» ;
echo ‘|’ . full_str_pad ( $pad_me , 20 , ‘ ‘ ). «|\n» ;
echo ‘|’ . full_str_pad ( $pad_me , 20 , ‘ ‘ , STR_PAD_RIGHT ). «|\n» ;
echo ‘|’ . full_str_pad ( $pad_me , 20 , ‘ ‘ , STR_PAD_BOTH ). «|\n» ;
?>
a different, more robust multibyte version of str_pad that works correctly only if $pad_string is non-multibyte string
function my_mb_str_pad($input, $pad_length, $pad_string=’ ‘, $pad_type=STR_PAD_RIGHT,$encoding=’UTF-8’) <
$mb_diff=mb_strlen($str, $encoding)-strlen($string);
return str_pad($input,$pad_length+$mb_diff,$pad_string,$pad_type);
>
Beware, \str_pad() is NOT able to correctly handle multibyte characters and as \strlen() it is assuming one char == byte. If you have multibyte chars in your string your result string will be shorter than you expect:
<?php
$a = ‘áč’ ; // 2 accented chars
$lenA = \ mb_strlen ( $a );
echo $lenA . PHP_EOL ;
$b = \ str_pad ( $a , $lenA + 10 , ‘ ‘ );
$lenB = \ mb_strlen ( $b );
echo $lenB . PHP_EOL ;
?>
would produce:
instead of expected 12. There seem noth to be mb_str_pad() equivalent so you may end you concatenating your string and padding manually:
<?php
$a = ‘áč’ ; // 2 accented chars
$b = mb_str_pad ( $a , $lenA + 10 , ‘ ‘ );
$lenB = \ mb_strlen ( $b );
echo $lenB . PHP_EOL ;
function mb_str_pad ( string $str , int $len , string $pad , int $align = \ STR_PAD_RIGHT ): string
<
$strLen = \ mb_strlen ( $str );
if ( $strLen >= $len ) <
return $str ;
>
$diff = $len — $strLen ;
$padding = \ mb_substr (\ str_repeat ( $pad , $diff ), 0 , $diff );
switch ( $align ) <
case \ STR_PAD_BOTH :
$diffHalf = (int)( $diff / 2 + 0.5 );
$padding = \ str_repeat ( $pad , $diffHalf );
$result = » < $padding >< $str > < $padding >» ;
break;
case \ STR_PAD_LEFT :
$result = » < $padding > < $str >» ;
$result = » < $str > < $padding >» ;
break;
case \ STR_PAD_RIGHT :
default:
$result = » < $str > < $padding >» ;
break;
>
return \ mb_substr ( $result , 0 , $len );
>
?>
returns expected 12 char long string.
you can use str_pad to display an integer with a fixed amount of digits, like that:
0002
0003
.
0100
by just writing
<?php
for ( $i = 0 ; $i < 10000 ; $i ++) <
echo str_pad ( $i , 4 , ‘0’ , STR_PAD_LEFT ). «\n» ;
>
?>
i set 4 digits (see parameter #2), but you can set any fitting your needs.
For me this worked.
$string = ‘help’;
#First, str_pad() with unique character.
$string = str_pad($string, 10, «*», STR_PAD_BOTH);
#$string = ‘***help***’;
#Second, str_replace with ‘ ’
$string = str_replace(«*», « », $string);
This is how I pad using :
str_replace(» «, « », str_pad($foo, 10, » «, STR_PAD_LEFT))
Seems to work well using two tags for each character added, at least for my use. YMMV.
Warning: If your string includes non-ascii characters (eg the British pounds sign), str_pad() will treat these as two characters when calculating the padding.
So for example:
<?php
str_pad ( $currency_symbol . $showtottopay , 12 , » » , STR_PAD_LEFT );
?>
will produce a different length string depending on whether $currency_symbol is pounds or dollars.
Hope this helps someone — it caused me a lot of problems with misaligned columns in my invoices until I worked it out.
Basically, *all* of you guys have a ‘long’ way of padding text with html tags (which includes ) You dont even have to do a str_replace. try the following code and this will work with ANY html tag there is out there and you don’t have to worry about tag character lengths so on and so forth:
<?
$text = «This is pretty interesting!»;
$pad_string = « »;
//Pad text on both sides
$text = str_pad($text, strlen($text)+(20*strlen($pad_string)), $pad_string, STR_PAD_BOTH);
print $text.» Dont you think?»;
?>
Will produce:
This is pretty interesting! Dont you think?
Here is the mcinp’s version of mb_str_pad bugfixed:
<?php
function mb_str_pad ( $input , $pad_length , $pad_string = ‘ ‘ , $pad_type = STR_PAD_RIGHT , $encoding = ‘UTF-8’ ) <
$mb_diff = mb_strlen ( $input , $encoding )- strlen ( $input );
return str_pad ( $input , $pad_length — $mb_diff , $pad_string , $pad_type );
>
?>
Still working correctly only if $pad_string is non-multibyte string
sprintf is faster
$sTime = microtime(true);
$s = sprintf(«%’-1000000s», ‘-‘);
$eTime = microtime(true);
echo ‘sprintf ran in ‘ . (($eTime — $sTime) * 1000) . ‘ milliseconds’ . «\n»;
$sTime = microtime(true);
$s = str_pad(‘-‘, 1000000, ‘-‘);
$eTime = microtime(true);
echo ‘str_pad ran in ‘ . (($eTime — $sTime) * 1000) . ‘ milliseconds’ . «\n»;
//result
sprintf ran in 2.0260810852051 milliseconds
str_pad ran in 26.59797668457 milliseconds
Fills the first argument (mostly a number, f.e. from a <select> loop to display a date or time) with zeroes.
<?php
function zerofill ( $mStretch , $iLength = 2 )
<
$sPrintfString = ‘%0’ . (int) $iLength . ‘s’ ;
return sprintf ( $sPrintfString , $mStretch );
>
?>
sprintf() is indeed faster than str_pad.
In case you want to pad 2 strings together with a character you can use:
<?php
function pad_between_strings ( $string1 , $string2 , $length , $char = » » ) <
$fill_length = $length — ( strlen ( $string1 ) + strlen ( $string2 ) );
return $string1 . str_repeat ( $char , $fill_length ) . $string2 ;
>
?>
sprintf() is not always faster. It certainly scales a lot better then str_pad so when running a benchmark that pads 10k characters, sprintf will come out on top. But if you benchmarked a more real world scenario, it seems str_pad comes out the clear winner.
$sTime = microtime(true);
$count = 5;
$s = sprintf(«%’\n5s», «\n»);
$eTime = microtime(true);
echo ‘sprintf ran in ‘ . (($eTime — $sTime) * 1000) . ‘ milliseconds’ . «\n»;
$sTime = microtime(true);
$s = str_pad(«\n», 5, «\n»);
$eTime = microtime(true);
echo ‘str_pad ran in ‘ . (($eTime — $sTime) * 1000) . ‘ milliseconds’ . «\n»;
sprintf ran in 0.015974044799805 milliseconds
str_pad ran in 0.0059604644775391 milliseconds
Here is a simple function to convert numbers into strings like this:
function number_pad ( $number , $n ) <
return str_pad ((int) $number , $n , «0» , STR_PAD_LEFT );
>
?>
$n indicates how many characters you want.
Here’s a quick and simple way to make an mb_str_pad function that works when you have correctly set your internal encoding.
I’m not sure how well this works in all possible scenarios but atleast it worked for me using UTF-8 as internal encoding and using this function on strings containing scandinavian characters «åäöÅÄÖ» that are double byte in UTF-8.
<?php
function mb_str_pad ( $input , $pad_length , $pad_string = ‘ ‘ , $pad_type = STR_PAD_RIGHT ) <
$diff = strlen ( $input ) — mb_strlen ( $input );
return str_pad ( $input , $pad_length + $diff , $pad_string , $pad_type );
>
?>
<?php
/**
* str_pad_html — Pad a string to a certain length with another string.
* accepts HTML code in param: $strPadString.
*
* @name str_pad_html()
* @author Tim Johannessen <root@it.dk>
* @version 1.0.0
* @param string $strInput The array to iterate through, all non-numeric values will be skipped.
* @param int $intPadLength Padding length, must be greater than zero.
* @param string [$strPadString] String to pad $strInput with (default: )
* @param int [$intPadType] STR_PAD_LEFT, STR_PAD_RIGHT (default), STR_PAD_BOTH
* @return string Returns the padded string
**/
function str_pad_html ( $strInput = «» , $intPadLength , $strPadString = « » , $intPadType = STR_PAD_RIGHT ) <
if ( strlen ( trim ( strip_tags ( $strInput ))) < intval ( $intPadLength )) <
switch ( $intPadType ) <
// STR_PAD_LEFT
case 0 :
$offsetLeft = intval ( $intPadLength — strlen ( trim ( strip_tags ( $strInput ))));
$offsetRight = 0 ;
break;
// STR_PAD_RIGHT
case 1 :
$offsetLeft = 0 ;
$offsetRight = intval ( $intPadLength — strlen ( trim ( strip_tags ( $strInput ))));
break;
// STR_PAD_BOTH
case 2 :
$offsetLeft = intval (( $intPadLength — strlen ( trim ( strip_tags ( $strInput )))) / 2 );
$offsetRight = round (( $intPadLength — strlen ( trim ( strip_tags ( $strInput )))) / 2 , 0 );
break;
// STR_PAD_RIGHT
default:
$offsetLeft = 0 ;
$offsetRight = intval ( $intPadLength — strlen ( trim ( strip_tags ( $strInput ))));
break;
>
$strPadded = str_repeat ( $strPadString , $offsetLeft ) . $strInput . str_repeat ( $strPadString , $offsetRight );
unset( $strInput , $offsetLeft , $offsetRight );
Правила оформления PHP-кода
Отступы улучшают читабельность кода. Для их оформления используйте четыре пробела (но не знак табуляции).
2. Ключевые слова и константы true / false / null
Ключевые слова PHP, а также константы true , false и null следует писать в нижнем регистре.
3. Определение пространств имён и блоков импорта
- Оставляйте одну пустую строку после определения пространства имён.
- Импорт пространств имён располагайте после определения пространства имён.
- Для каждого импорта пространства имён используйте отдельную строку со своим use .
- После блока импорта оставляйте одну пустую строку.
4. Методы и аргументы
- Пробел после имени метода.
После имени метода не должно быть пробела. Хорошо Плохо - Открывающая скобка.
Открывающую фигурную скобку ставьте на отдельной строке. Хорошо Плохо - Закрывающая скобка.
Закрывающую фигурную скобку ставьте на следующей за телом метода строке. Хорошо Плохо - Пробелы в определении метода.
Не должно быть пробелов после открывающей и перед закрывающей круглыми скобками в определении метода. Хорошо Плохо - Пробелы в списке аргументов.
В списке аргументов перед запятыми не должно быть пробелов, после каждой запятой – один пробел. Хорошо Плохо - Аргументы на нескольких строках.
Список аргументов можно разделять на несколько строк, каждая из которых дополнена слева одним отступом (четырьмя пробелами). В таком случае первый элемент списка аргументов нужно располагать с новой строки, и в каждой строке указывайте только один аргумент. При этом закрывающая круглая скобка и открывающая фигурная скобка должны располагаться вместе на своей отдельной строке, а между ними должен быть один пробел. Хорошо Плохо
5. Вызовы методов и функций
- Пробелы.
В коде вызова функций и методов не ставьте пробел:- между именем функции или метода и открывающей круглой скобкой;
- после открывающей круглой скобки;
- перед закрывающей круглой скобкой.
6. Конструкции switch и case
Конструкция switch должна выглядеть следующим образом. Выражение case смещено на один отступ (четыре пробела) от switch , а ключевое слово break (или иное слово, обозначающее выход из конструкции) располагается на том же уровне отступов, что и тело case . Если в непустом теле case умышленно не используется break , допишите комментарий в стиле // no break .
7. Конструкции while и do while
Конструкцию while следует оформлять следующим образом. Между while и ( ставится пробел. После ( и до ) пробелов не должно быть. ) и < разделяются пробелом. Тело конструкции отделяется одним отступом (четыре пробела). >пишется на новой строке после тела конструкции.
Конструкция do while должна выглядеть так:
8. Конструкция for
Пример оформления конструкции for представлен ниже. Между for и ( ставится пробел. После ; ставится пробел. ) и < разделяются пробелом. Тело конструкции отделяется одним отступом (четыре пробела). >пишется на новой строке после тела конструкции.
9. Конструкция foreach
Конструкция foreach должна выглядеть следующим образом. Между foreach и ( ставится пробел. Перед и после => ставится пробел. ) и < разделяются пробелом. Тело конструкции отделяется одним отступом (четыре пробела). >пишется на новой строке после тела конструкции.
10. Конструкция try catch
Оформляйте конструкцию try catch следующим образом. Между try и < ставится пробел. >и следующий за ним catch находятся на одной строке. Между catch и ( ставится пробел. ) и < разделяются пробелом. Тело try и тело catch отделяется одним отступом (четыре пробела). >пишется на новой строке после тела конструкции.