Cięcie stringa po n-tym powtórzeniu znaku |
Cięcie stringa po n-tym powtórzeniu znaku |
26.10.2012, 22:14:03
Post
#1
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 10 Dołączył: 8.02.2012 Ostrzeżenie: (0%) |
Witam
chciałbym uzyskać bez użycia explode raczej dziejącą się w jednej linijce... Dane są przykładowe i każda z nich będzie ulegać zmianie więc pomysły typu \trzy\cztery odpadaja. jeden\dwa\trzy\cztery wykonano operacje jeden\dwa Za pomoc thx Ten post edytował KotWButach 26.10.2012, 22:14:23 |
|
|
26.10.2012, 22:29:51
Post
#2
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) |
Chcesz wykonać operacje na wzór explode bez użycia tej funkcji po n-tym powtórzeniu znaku dzielącego, tak?
Pytanie zadałeś bardzo chaotycznie, brak w nim jasnego przedstawienia problemu, na przyszłość staraj się poskładać myśli do kupy zanim zaczniesz tworzyć nowy temat. -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
26.10.2012, 22:33:19
Post
#3
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 10 Dołączył: 8.02.2012 Ostrzeżenie: (0%) |
przecież masz przykład
jak bez eksplode uzyskać z ciągu jeden\dwa\trzy\cztery to jeden\dwa gdzie dane mogą się zmieniać. |
|
|
26.10.2012, 22:45:07
Post
#4
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) |
Dobra, jak chcesz sobie utrudniać... sądziłem, że źle zrozumiałem (bo to bez urazy debilne pytanie, gdy ma się sprawdzoną, dobrze zoptymalizowaną funkcję o wcześniej wspomnianej nazwie).
1. wrzuć sobie każdy znak do osobnego indexu w tablicy -> str_split 2. w pętli sprawdź, czy wskazany znak jest / i zapisz który raz się powtarza 3. powtarzaj krok 2 aż znak / nie pojawi się n-razy, później zapisz index w którym ucinasz stary ciąg 4. wytnij z tablicy odpowiedni zakres 5. sklej do stringa O to chodziło? -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
26.10.2012, 22:58:28
Post
#5
|
|
Grupa: Zarejestrowani Postów: 361 Pomógł: 10 Dołączył: 8.02.2012 Ostrzeżenie: (0%) |
Ehh na siłę próbujesz mi wmówić że zadałem debilne pytanie.
Ale chodzi mi o łatwiejsze rozwiązania... (czyt. krótsze mieszczące się w jednej linijce) I proszę osobiste wycieczki komuś innemu... nie ma się co pieklić... Jeżeli się nie da to moje pytanie uzyska jedyną słuszną odpowiedź ale może wyrażenia regularne albo co istnieje? Nie wiem... inaczej bym nie pytał. dla przykładu to zadziała na usunięcie tylko ostatniej cześci Ten post edytował KotWButach 26.10.2012, 23:02:23 |
|
|
26.10.2012, 23:01:02
Post
#6
|
|
Grupa: Zarejestrowani Postów: 763 Pomógł: 117 Dołączył: 15.03.2010 Skąd: void Ostrzeżenie: (0%) |
Możesz całość skrócić poprzez zastosowanie odwołania $str{x} gdzie x jest numerem znaku, ale to i tak niewiele zmienia bo musisz wykonać pętle, tak czy inaczej...
Także jedna linijka to tylko w 1 przypadku: explode. @edit ale w tym przypadku szukasz znaku, to nie jest sztywne ucinanie końcówki/początku a dynamiczne weryfikowanie zawartości ciągu o losowej długości w poszukiwaniu określonego znaku. @edit 2 wyrażeniem regularnym mógłbyś to rozpykać, przyznaję że to dość krótki sposób ale to nie będzie jedna linijka ze względu na konieczność późniejszego "sklejenia" wyników z wyrażenia w ciąg. Ten post edytował modern-web 26.10.2012, 23:04:16 -------------------- Pomogłem? Kliknij `Pomógł`. To nic nie kosztuje, a mnie usatysfakcjonuje! ;)
|
|
|
27.10.2012, 11:58:59
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) |
@KotWButach Jeżeli dobrze zrozumiałem to chcesz przykładowo uciąć tekst po drugim wystąpieniu znaku "/". W takim razie używasz funkcji strpos() aby ustalić jego pozycję, a potem substr(), żeby uciąć i tyle. Zauważ, że w funkcji strpos, masz opcjonalny parametr offset, którym możesz ustawić właśnie, które powtórzenie znaku w stringu Ciebie interesuje i ustalić jego pozycję.
Więc pewnie będzie to coś w stylu: dla drugiego wystąpienia "/" w tekście, ale sprawdź bo pisane z palca Ten post edytował tehaha 27.10.2012, 12:01:25 |
|
|
27.10.2012, 15:31:37
Post
#8
|
|
Grupa: Zarejestrowani Postów: 98 Pomógł: 33 Dołączył: 10.05.2011 Skąd: Krak Ostrzeżenie: (0%) |
Więc pewnie będzie to coś w stylu: dla drugiego wystąpienia "/" w tekście, ale sprawdź bo pisane z palca To nie zadziała by pozycja pierwszego slasha musiałaby być znana, nie jest to 1. Przychodzi mi do głowy preg_match:
Można też z explode:
|
|
|
27.10.2012, 15:59:10
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 748 Pomógł: 388 Dołączył: 21.08.2009 Skąd: Gdynia Ostrzeżenie: (0%) |
Cytat To nie zadziała by pozycja pierwszego slasha musiałaby być znana, nie jest to 1. masz rację, zajrzałem do manuala i faktycznie wydawało mi się, że tam ustawiasz, które wystąpienie stringa ma być szukane.Ale w każdym razie wydaje mi się, że i tak użycie funkcji strpos() w pętli powinno być wydajniejsze niż wyrażenia regularne, po prostu w każdej następnej pętli dajesz offset = ostatnia pozycja + 1. Edit: znalazłem nawet gotowy kod na to: http://board.phpbuilder.com/showthread.php...within-a-string do funkcje substr() wstawiasz wynik tej funkcji. Ten post edytował tehaha 27.10.2012, 16:00:54 |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 19:44 |