Как добавить 000001 + 000001 в php? [Дубликат]

Если вы префикс своей строки одним пробелом, вы можете использовать это, чтобы получить первое число из строки:

var start = 0 // Initial search offset.
var firstOccurence = input.indexOf(' ', start);
//Get the substring from the first occurrence of ' ' after start, to the next one, and parse it as a float.
parseFloat(input.substring(firstOccurence , input.indexOf(' ', firstOccurence+1)));

Затем вы можете использовать следующее, чтобы получить числа после этого, из строки:

firstOccurence = t.indexOf(' ', firstOccurence+1);
parseFloat(t.substring(firstOccurence , t.indexOf(' ', firstOccurence+1)));

Используя это в цикле, вы можете выполнить поиск в своем списке, и вы можете начать поиск в списке по указанному индексу. Например, вы не можете запросить 7-й поплавок в списке. Единственный надежный способ сделать это - использовать .split(' ') или использовать приведенный выше код в цикле.

Чтобы найти n th float на входе, вы можете использовать следующее:

for(var i = 0, previousIndex = 0; i < n; i++){
    previousIndex = input.indexOf(' ', previousIndex + 1);
}
var float = parseFloat(input.substring(previousIndex, input.indexOf(' ',  previousIndex + 1)));
470
задан User that is not a user 10 August 2017 в 04:00
поделиться

11 ответов

Используйте sprintf :

sprintf('%08d', 1234567);

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

str_pad($value, 8, '0', STR_PAD_LEFT);
949
ответ дан Zanshin13 15 August 2018 в 16:16
поделиться
  • 1
    Просто хотел добавить: str_pad не вариант с отрицательными номерами – wtf8_decode 12 January 2015 в 20:23
  • 2
    Просто добавьте поверх того, что сказал wtf8_decode; Отрицательные числа не будут иметь начальных нулей, и они не являются положительными числами. то есть 08 будет записываться как дата или что-то, что ожидает положительное двузначное число (код учетной записи банковского счета и т. д.). Пожалуйста, поправьте меня, если я ошибаюсь, но насколько я знаю, нет реального жизненного примера, требующего начального нуля на отрицательном значении? – guyver4mk 14 March 2016 в 10:24
  • 3
    Хотелось добавить, что sprintf('%+03d:00 UTC',$i), где $i - от 12 до 12, будет печатать + или - по мере необходимости, а также помещать ведущие нули для чисел менее 2-х цифр. Отлично подходит для создания часового пояса SELECT в HTML. – Volomike 8 August 2016 в 04:22
  • 4
    для текущей версии (7.1) и ниже sprintf ( 3v4l.org/junvv/perf#output ) немного быстрее, чем str_pad ( 3v4l.org/cliNP/perf #output ) – Vladyslav Startsev 22 June 2017 в 00:08
  • 5
    09 и 08 не работает в PHP7 – Hiren Bhut 1 February 2018 в 10:50

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

$str = ($input < 10000000) ? 0 . $input : $input;

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

$str = substr('00000000' . $input, -8);

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

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

5
ответ дан AbcAeffchen 15 August 2018 в 16:16
поделиться
  • 1
    Спасибо, мне нравится ваша вариация, но думаю, что она должна быть $ str = (strlen ($ input) & lt; 8)? 0. $ input: $ input; – JMX 6 January 2016 в 19:13
  • 2
    @JMX На самом деле оба способа работают нормально. (Помимо моих недостающих $ я только что зафиксировал) – AbcAeffchen 6 January 2016 в 20:03

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

Это будет:

$value = sprintf( '%08d', 1234567 );
17
ответ дан Adi 15 August 2018 в 16:16
поделиться

Это отлично работает: $number = 13246; echo sprintf( '%08d', $number );

0
ответ дан CZ workman 15 August 2018 в 16:16
поделиться

Я написал эту простую функцию для создания этого формата: 01:00:03

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

function formatSeconds($secs) {
    $result = '';

    $seconds = intval($secs) % 60;
    $minutes = (intval($secs) / 60) % 60;
    $hours = (intval($secs) / 3600) % 24;
    $days = intval(intval($secs) / (3600*24));

    if ($days > 0) {
        $result = str_pad($days, 2, '0', STR_PAD_LEFT) . ':';
    } 

    if(($hours > 0) || ($result!="")) {
        $result .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
    } 

    if (($minutes > 0) || ($result!="")) {
        $result .= str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
    } 

    //seconds aways shown
    $result .= str_pad($seconds, 2, '0', STR_PAD_LEFT); 

    return $result;

} //funct

Примеры:

echo formatSeconds(15); //15
echo formatSeconds(100); //01:40
echo formatSeconds(10800); //03:00:00 (mins shown even if zero)
echo formatSeconds(10000000); //115:17:46:40 
2
ответ дан Enigma Plus 15 August 2018 в 16:16
поделиться
function duration($time){

    $hours = '';
    $minutes = '00:';
    $seconds = '00';

    if($time >= 3600){
        //0 - ~ hours
        $hours    = floor($time / 3600);
        $hours    = str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
        $time     = $time % 3600;
    }

    if($time >= 60){
        //0 - 60 minute     
        $minutes  = floor($time / 60);
        $minutes  = str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
        $time     = $time % 60; 
    }

    if($time){
        //0 - 60 second
        $seconds  = str_pad($time, 2, '0', STR_PAD_LEFT);       
    }

    return $hours . $minutes . $seconds;

}

echo duration(59); // 00:59
echo duration(590); // 09:50
echo duration(5900); // 01:38:20
-1
ответ дан Jimmy Adaro 15 August 2018 в 16:16
поделиться
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
18
ответ дан joan16v 15 August 2018 в 16:16
поделиться

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

  • Чтобы эхо его: printf("%08d", $value);
  • Чтобы получить его: $formatted_value = sprintf("%08d", $value);

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

70
ответ дан Logan Murphy 15 August 2018 в 16:16
поделиться

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

$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
16
ответ дан Pang 15 August 2018 в 16:16
поделиться

Простой ответ

$p = 1234567;
$p = sprintf("%08d",$p);

Я не уверен, как интерпретировать комментарий, говорящий «Он никогда не будет более 8 цифр», и если он ссылается на ввод или вывод. Если это относится к выходу, у вас должен быть дополнительный вызов substr () для обрезания строки.

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

$p = substr(sprintf('%08d', $p),0,8);

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

$p = substr(sprintf('%08d', $p),-8,8);
13
ответ дан Peter Lindqvist 15 August 2018 в 16:16
поделиться

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

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

<?php
    $isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
14
ответ дан user 15 August 2018 в 16:16
поделиться
  • 1
    Было бы лучше с примером или более объяснением, кроме простого связывания справочной страницы для sprintf (). – jharrell 13 September 2014 в 21:04
  • 2
    @jharrell не стесняйтесь редактировать :) – user 16 September 2014 в 15:11
Другие вопросы по тегам:

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