Если вы префикс своей строки одним пробелом, вы можете использовать это, чтобы получить первое число из строки:
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)));
Используйте sprintf
:
sprintf('%08d', 1234567);
В качестве альтернативы вы также можете использовать str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
Если входные номера всегда содержат 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.
$
я только что зафиксировал)
– AbcAeffchen
6 January 2016 в 20:03
Хотя я не совсем уверен, что вы хотите сделать, вы, вероятно, ищете sprintf .
Это будет:
$value = sprintf( '%08d', 1234567 );
Это отлично работает: $number = 13246; echo sprintf( '%08d', $number );
Я написал эту простую функцию для создания этого формата: 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
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
echo str_pad("1234567", 8, '0', STR_PAD_LEFT);
Учитывая, что значение находится в $ value:
printf("%08d", $value);
$formatted_value = sprintf("%08d", $value);
Это должно сделать трюк
Когда мне нужно 01 вместо 1, для меня работало следующее:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
Простой ответ
$p = 1234567;
$p = sprintf("%08d",$p);
Я не уверен, как интерпретировать комментарий, говорящий «Он никогда не будет более 8 цифр», и если он ссылается на ввод или вывод. Если это относится к выходу, у вас должен быть дополнительный вызов substr () для обрезания строки.
Чтобы скопировать первые 8 цифр
$p = substr(sprintf('%08d', $p),0,8);
Чтобы закрепить последние 8 цифры
$p = substr(sprintf('%08d', $p),-8,8);
sprintf
- это то, что вам нужно.
EDIT (, как-то запрошенный downvotes ), со страницы, указанной выше, вот пример "нулевые полные числа":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
sprintf('%+03d:00 UTC',$i)
, где$i
- от 12 до 12, будет печатать + или - по мере необходимости, а также помещать ведущие нули для чисел менее 2-х цифр. Отлично подходит для создания часового поясаSELECT
в HTML. – Volomike 8 August 2016 в 04:22sprintf
( 3v4l.org/junvv/perf#output ) немного быстрее, чемstr_pad
( 3v4l.org/cliNP/perf #output ) – Vladyslav Startsev 22 June 2017 в 00:08