Czy są to trzy oddzielne ciągi, czy jeden ciąg z znakami nowej linii oddzielającymi każdą liczbę? Podczas redagowania pytania zauważyłem, że masz <br>tagi oddzielające liczby; czy faktycznie są częścią twojego sznurka?
Caveat $ str: = '0'. Adresowane w mojej odpowiedzi, w oparciu o tę odpowiedź.
Mike Weir
dlaczego zbyt skomplikowane rzeczy? a mikrofon to $ str + = 0; jak wyjaśniono tutaj: nabtron.com/kiss-code
Nabeel Khan
@NabeelKhan To nie odpowiadałoby na pytanie, które nie wymaga konwersji ciągu znaków na liczbę całkowitą. Zobacz komentarze do odpowiedzi Svisstack, aby dowiedzieć się, dlaczego nie jest to takie świetne rozwiązanie.
lonesomeday
@lonesomeday powinieneś uważnie przeczytać jego pytanie, w którym wspomina: „zwróć uwagę, że powyższa liczba została wygenerowana losowo”. więc są już liczbami całkowitymi :)
Właśnie wypróbowałem (int) "00009384783473"(losową liczbę) i mój wynik to 2147483647. Jeśli jednak rzucę go jako pływaka, wydaje się, że działa dobrze. Dziwne
JamesHalsall
podręcznik mówi, że „Rozmiar liczby całkowitej jest zależny od platformy, chociaż zwykle maksymalna wartość to około dwa miliardy (czyli 32 bity ze
znakiem
1
Nie dziwne. Liczby całkowite w php idą do 2 ^ 31, czyli 2147483647. W przypadku większych liczb będziesz musiał użyć rozwiązania opartego na ciągach lonesomeday.
awm
1
Rzutowanie na zmiennoprzecinkowe może wydawać się działać, ale w pewnym momencie wystąpią błędy zaokrągleń.
awm
1
co powiesz na pomysł oceny każdego ciągu za pomocą instrukcji pętli, że kiedy dojdzie do niezerowej cyfry (lub ciągu), otrzyma indeks tej cyfry i porzuci wszystkie poprzednie zera, a następnie wyświetli ciąg, który zaczyna się z pierwszą wartością niezerową ...
Gerald,
10
Nie wiem, dlaczego ludzie używają tak złożonych metod, aby osiągnąć tak prostą rzecz! A regex? Łał!
Wydaje się, że jest to prostsze rozwiązanie, ale nie obsługuje żadnego rozmiaru łańcucha, tak jak inne odpowiedzi. Konwertujesz ciąg na liczbę całkowitą, a następnie z powrotem jako ciąg - prostsze jest po prostu skrócenie ciągu.
Mike Weir
1
Ciekawe, ale nie wiem, czy to najlepsze rozwiązanie przy konwersjach typów.
jonathanbell
1
Proszę, nie rób tego ... dlatego PHP ma złą reputację
Dan F.
9
Podobnie jak w przypadku innej sugestii, z wyjątkiem tego, że nie zatrze rzeczywistego zera:
Podstawowe informacje o Regex: ^sygnały początku łańcucha i +znak nie sygnalizują więcej lub żadnego znaku poprzedzającego. Dlatego wyrażenie regularne ^0+dopasowuje wszystkie zera na początku ciągu.
echo round($val ="0005");
echo $val =0005;//both output 5
echo round($val =00000648370000075845);
echo round($val ="00000648370000075845");//output 648370000075845, no need to care about the other zeroes in the number//like with regex or comparative functions. Works w/wo single/double quotes
Właściwie każda funkcja matematyczna pobierze liczbę z „ciągu znaków” i tak ją potraktuje. Jest to znacznie prostsze niż jakiekolwiek wyrażenie regularne lub funkcje porównawcze. Widziałem to na php.net, nie pamiętam gdzie.
<br>
tagi oddzielające liczby; czy faktycznie są częścią twojego sznurka?Odpowiedzi:
ltrim
:źródło
źródło
(int) "00009384783473"
(losową liczbę) i mój wynik to 2147483647. Jeśli jednak rzucę go jako pływaka, wydaje się, że działa dobrze. DziwneNie wiem, dlaczego ludzie używają tak złożonych metod, aby osiągnąć tak prostą rzecz! A regex? Łał!
Proszę bardzo, najłatwiej i najprostszy sposób (jak wyjaśniono tutaj: https://nabtron.com/kiss-code/ ):
źródło
Podobnie jak w przypadku innej sugestii, z wyjątkiem tego, że nie zatrze rzeczywistego zera:
Lub jak sugerowano (od PHP 5.3), można użyć skróconego operatora trójskładnikowego:
źródło
$str = ltrim($str, '0') ?: '0';
- brak zbędnego wywołania trymowaniamożesz dodać „+” do swojej zmiennej,
przykład:
źródło
Regex został już zaproponowany, ale nie poprawnie:
wynik jest wtedy:
Podstawowe informacje o Regex:
^
sygnały początku łańcucha i+
znak nie sygnalizują więcej lub żadnego znaku poprzedzającego. Dlatego wyrażenie regularne^0+
dopasowuje wszystkie zera na początku ciągu.źródło
preg_replace() expects at least 3 parameters, 2 given
Nie sądzę, że preg_replace jest odpowiedzią ... stary wątek, ale tak się złożyło, że szukałem tego dzisiaj. ltrim i (int) casting wygrywa.
źródło
Jestem naprawiony w ten sposób.
to jest bardzo proste. przekazuj tylko łańcuch, usuwając zerowy początek łańcucha.
źródło
Ajay Kumar oferuje najprostsze echo + $ numString; Używam tych:
Właściwie każda funkcja matematyczna pobierze liczbę z „ciągu znaków” i tak ją potraktuje. Jest to znacznie prostsze niż jakiekolwiek wyrażenie regularne lub funkcje porównawcze. Widziałem to na php.net, nie pamiętam gdzie.
źródło
Zakładając, że chcesz usunąć trzy lub więcej zer, a Twój przykład to jeden ciąg:
Możesz dopasować wzorzec wyrażenia regularnego do tego, czego potrzebujesz, jeśli moje założenia są błędne.
Ta pomoc?
źródło