Oc-windows.ru

IT Новости из мира ПК
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Php ведущие нули

str_pad

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

str_pad — Дополняет строку другой строкой до заданной длины

Описание

Эта функция возвращает строку input , дополненную слева, справа или с обеих сторон до заданной длины. Если необязательный аргумент pad_string не передан, то input будет дополнен пробелами, иначе он будет дополнен символами из pad_string до нужной длины.

Список параметров

Если значение pad_length отрицательно, меньше или равно длине входной строки, то дополнения не происходит и возвращается исходная строка input .

pad_string может быть урезана, если необходимое количество дополняемых символов не делится нацело на длину строки pad_string .

Необязательный аргумент pad_type может иметь значение STR_PAD_RIGHT , STR_PAD_LEFT или STR_PAD_BOTH . Если не указан, то по умолчанию используется STR_PAD_RIGHT .

Возвращаемые значения

Возвращает дополненную строку.

Примеры

Пример #1 Пример использования str_pad()

User Contributed Notes 24 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

A proper unicode string padder;

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;
// 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: Ä. ÄÖ
.

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 ;
>
?>

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);

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);
>

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:
( $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.

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:

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» ;
?>

str_pad() can provide sufficient «zero padding» when using block ciphers and manual padding with openssl_encrypt() and similar.

The example below will pad the 6 character text «Secret» with two x00 characters and return 8 characters of data. Substitute your plain text and block size as needed.

= «Secret» ;
$block_size = 8 ;
$length = ceil ( strlen ( $text ) / $block_size ) * $block_size ;
$data = str_pad ( $text , $length , «x00» );

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

Here is the mcinp’s version of mb_str_pad bugfixed:

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

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.

Fills the first argument (mostly a number, f.e. from a loop to display a date or time) with zeroes.

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:

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:

0 => 0000
1 => 0001
20 => 0020
432 => 0432

function number_pad ( $number , $n ) <
return str_pad ((int) $number , $n , «0» , STR_PAD_LEFT );
>

?>

$n indicates how many characters you want.

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:

Will produce:
This is pretty interesting! Dont you think?

/**
* 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
* @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;
>

Читать еще:  Свеклорезка member php action profile

$strPadded = str_repeat ( $strPadString , $offsetLeft ) . $strInput . str_repeat ( $strPadString , $offsetRight );
unset( $strInput , $offsetLeft , $offsetRight );

Форматирование числа с ведущими нулями в PHP

У меня есть переменная, которая содержит значение 1234567 .

Я бы хотел, чтобы он содержал ровно 8 цифр, т. е. 01234567 .

Есть ли для этого функция PHP?

14 Ответов

В качестве альтернативы вы также можете использовать str_pad :

Учитывая, что значение находится в $value:

$formatted_value = sprintf(«%08d», $value);

Это должно сделать трюк

Когда мне нужен 01 вместо 1, для меня сработало следующее:

Хотя я не совсем уверен, что вы хотите сделать, вы, вероятно, ищете sprintf .

sprintf — это то, что вам нужно.

EDIT (каким-то образом запрошенный downvotes ), со страницы, связанной выше, Вот пример » целых чисел с нулевым заполнением»:

Я не знаю, как интерпретировать комментарий, говорящий «It will never be more than 8 digits», и если это относится к входу или выходу. Если это относится к выходным данным, вам придется иметь дополнительный вызов substr(), чтобы обрезать строку.

Чтобы обрезать первые 8 цифр

Чтобы обрезать последние 8 цифр

Если входные номера всегда содержат 7 или 8 цифр, вы также можете использовать

Я провел несколько тестов и понял, что это будет вдвое быстрее, чем str_pad или sprintf .
Если входной сигнал может иметь любую длину, то вы также можете использовать

Это не так быстро, как другой, но также должно быть немного быстрее, чем str_pad и sprintf .

Кстати: мой тест также сказал, что sprintf немного быстрее, чем str_pad . Я сделал все тесты с PHP 5.6.

Я написал эту простую функцию, чтобы создать этот формат: 01:00:03

Секунды всегда отображаются (даже если они равны нулю). Минуты показываются, если они больше нуля или если требуются часы или дни. Часы показываются, если больше нуля или если требуются дни. Дни показываются, если они больше нуля.

Это прекрасно работает:

Вы всегда можете злоупотреблять типом жонглирования:

Это не будет работать, как ожидалось, Если либо 10 ** pad > INT_MAX , либо value >= 10 * pad .

Если вы можете добавить ноль или что-нибудь в строку. любить

Похожие вопросы:

Мое требование заключается в том, что я должен пройти 4 или более digits и провалить rest. regex я использовал это: var test = new RegExp(/[0-9]<4,100>$/); Однако числа с ведущими нулями, такие как.

Я хотел бы отформатировать как 10 цифр в общей сложности независимо от длины фактических данных, заполняя ведущими нулями. Пример фактические данные 123456 , то мой результат будет 0000123456 . Но.

Есть ли способ превратить базовое десятичное число с ведущими нулями в строку в javascript? Похоже, что javascript просто не имеет понятия о базовом десятичном числе с ведущими нулями. Пример того.

Я хочу отформатировать число с десятичной точкой в нем с ведущими нулями. Этот >>> ‘3.3’.zfill(5) 003.3 учитывает все цифры и даже десятичную точку. Есть ли функция в python, которая.

Как мы можем перевернуть число с ведущими нулями в числе ? Например: если входной сигнал 004, выход должен быть 400. Я написал ниже программу, но она работает только тогда, когда нет ведущих нулей.

Это кажется простым вопросом, но я не могу найти ответ нигде. Если у меня есть целочисленная переменная, как я могу преобразовать ее в строку с ведущими нулями? Я хочу что-то, как код ниже: n = 4.

Я получаю длинный XML от backend. Для дальнейшего использования xml я преобразую его в объект JSON, используя одну из стандартных библиотек XMLtoJSON javascript. Проблема в том, что некоторые.

У меня есть числа в массиве от 0001 до 6500, есть несколько недостающих чисел, я хочу выяснить, какие из них отсутствуют, однако я не могу заставить его работать с ведущими нулями. foreach($newFiles.

Увеличьте значение с ведущими нулями, используя php, и эти числа должны быть из счетчиков в базе данных. Например, от 0001 до 1000.

Мне нужно извлечь числа с ведущими нулями из смешанных ячеек? Пример содержимого ячейки A1: A1: 0012 SomeText Мне нужны в ячейке B1 только цифры с ведущими нулями: B1: 0012 Если я помещу формулу.

Php ведущие нули

В распределенных системах, таких, как Интернет, время играет особую роль. Из-за незначительного расхождения системных часов игрок на рынке Forex может потерять десятки тысяч долларов в течение нескольких минут; система деловой разведки ошибется в составлении прогноза; серверы NNTP в процессе синхронизации потеряют важную информацию, нужную пользователю и т.д.

PHP содержит множество функций для работы с датой и временем. Наиболее употребимыми являются:

  • time( ) — возвращает текущее абсолютное время. Это число равно количеству секунд, которое прошло с полуночи 1 января 1970 года (с начала эпохи UNIX).
  • getdate( ) — считывает информацию о дате и времени. Возвращает ассоциативный массив, содержащий информацию по заданному или по текущему (по умолчанию) времени. Массив содержит следующие элементы:

seconds

Секунды (0-59)
minutes

Минуты (0-59)
hours

Часы (0-23)
mday

День месяца (1-31)
wday

День недели (0-6), начиная с воскресенья
mon

Месяц (1-12)
year

Год
yday

День года (0-365)
weekday

Название дня недели (например, Friday)
month

Название месяца (например, January)
0

Абсолютное время

Пример 1

a

Включено обозначение «am» или «pm»
A

Включено обозначение «AM» или «PM»
d

День месяца (01-31)
D

Сокращенное название дня недели (три буквы)
F

Полное название месяца
g

Часы (12-часовой формат без ведущих нулей)
G

Часы (24-часовой формат без ведущих нулей)
h

Часы (12-часовой формат)
H

Часы (24-часовой формат)
i

Минуты (00-59)
j

День месяца без ведущих нулей (1-31)
l

Полное название дня недели
L

Признак високосного года (0 или 1)
m

Месяц (01-12)
M

Сокращенное название месяца (три буквы)
n

Месяц (1-12)
s

Секунды (00-59)
t

Количество дней в данном месяце (от 28 до 31)
U

Абсолютное время
w

Номер дня недели (0 — воскресенье, 6 — суббота)
y

Год (два разряда)
Y

Год (четыре разряда)
z

День года (0-365)
Z

Смещение часового пояса в секундах (от -43200 до 43200)

Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку. Если в строку формата нужно добавить символы, которые сами по себе являются кодами формата, то перед ними надо поставить обратную косую черту «». Символы, которые становятся кодами формата при добавлении к ним обратной косой, нужно предварять двумя косыми. Например, если необходимо добавить в строку «n», то надо ввести «\n», поскольку «n» является символом новой строки.

Пример 2

mktime( ) — возвращает абсолютное время, которое затем можно использовать с функциями date() или getdate(). Принимает до шести целочисленных аргументов в следующем порядке:

часы
минуты
секунды
месяц
день месяца
год

Пример 3

Внимание! Дата может находиться в допустимом диапазоне, но остальные функции работы с датами не примут это значение. Так, нельзя использовать mktime() для годов до 1902, а также следует использовать ее осторожно для годов до 1970.

strftime( ) — формирование локальной даты и времени. Аргументы: строка формата и абсолютное время. Второй аргумент необязателен. Возвращает строку с заданной или текущей датой в указанном формате. При этом названия месяцев и дней недели извлекается из локали, выбранной с помощью функции setlocate( ) Строка формата может содержать следующие коды:

%a

Сокращенное название дня недели
%A

Полное название дня недели
%b

Сокращенное название месяца
%B

Полное название месяца
%c

Предпочтительный формат даты и времени
%C

Номер века
%d

День месяца (1-31)
%D

То же, что и %m/%d/%y
%e

Месяц (1-12)
%h

То же, что и %b
%H

Часы (24-часовой формат)
%I

Часы (12-часовой формат)
%j

День года (0-365)
%m

Месяц (1-12)
%M

Минуты
%n

Символ новой строки
%p

Включено обозначение «am» или «pm»
%r

Время с использованием a.m./p.m.-нотации
%R

Время в 24-часовом формате
%S

Секунды (00-59)
%t

Символ табуляции
%T

То же, что и %H:%M:%S
%u

Номер дня недели (1 — понедельник, 7 — воскресенье)
%U

Номер недели. Отсчет начинается с первого воскресенья года
%V

Номер недели по ISO 8601:1988. Первая неделя должна иметь не менее четырех дней, а понедельник считается первым днем
%W

Номер недели. Отсчет начинается с первого понедельника года
%w

Номер дня недели (0 — воскресенье, 6 — суббота)
%x

Предпочтительный формат даты без времени
%X

Предпочтительный формат времени без даты
%y

Год (два разряда)
%Y

Год (четыре разряда)
%Z

Часовой пояс (имя или сокращение)
%%

Символ «%»

Любая другая информация, включенная в строку формата, будет вставлена в возвращаемую строку.

Ссылка на основную публикацию
Adblock
detector
×
×