Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Usuwanie ze stringa pozycji od końca
jakkolwiek
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.07.2008
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam,
męczę się z pewnym problemem, a nie mogę nigdzie znaleźć odpowiedzi na to albo źle szukam...
Od razu przejdę do rzeczy - mam tablicę zawierającą wartości: 1000000, 1010000, 1011000, 1011010. Muszę zrobić następującą akcję:
dodać na początek stringa 0 (co nie jest oczywiście problemem) i następnie od końca stringa usunąć 00 parami, tzn. na podanych przykładach powinno po wykonaniu skryptu wyjść:
1000000 -> 01
1010000 -> 0101
1011000 -> 010110
1011010 -> 0011010

innymi słowy - powinny zostać usunięte po dwa zera od tyłu tylko jeżeli istnieją w parze, aż nie natrafi na inny znak lub parę skłądającą się z 0 i czegoś lub czegos i 0. Kombinuje dosłownie jak koń pod górę i po próbowaniu różnych sposobów - jedyne co do tej pory mi wyszło to pętla for... Może ktoś kojarzy funkcję, która pozwala na odcinanie od końca? Czy w jaki sposób to ugryźć?!

  1. $w = array('1000000','1010000','1011000','1011010');
  2. for($i = 0; $i < 4; $i++) {
  3. echo $w[$i].'<br>';
  4. }


próbowałem w to wmieszać pętlę while, ale nie wychodziło mi zupełnie. Nie wiem jak do tego podejść... ;/
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ja bym się bawił w coś w stylu:
  1. $change = true;
  2. $was_changed = false;
  3. while($change) {
  4. if(substr($w[i], -2) == '00') {
  5. $w[i] = substr($w[i], 0, -2);
  6. $was_changed = true;
  7. } else
  8. $change = false;
  9. }
  10. if($was_changed)
  11. $w[i] = '0'.$w[i];
Oczywiście w pętli by takie coś z każdym elementem robił. Dlaczego tak? Bierze element i sprawdza jego dwa ostatnie znaki. Jeśli jest to ciąg 00 to zamienia ciąg na pozbawiony ich i ustawia flagę, ze zaszła zmiana. Oraz próbuje robić to tak długo jak tylko się da. Flaga $change jest by rozpoznawać czy kontynuować zmienianie czy nie. zaś $was changed by rozpoznać czy zmiany zaszły i w razie czego dodać 0 na początku. Nie dawałem sprawdzenia z -2 do warunku while bezpośrednio bo by nam umknęło czy mamy owo dodatkowe 0 na początek dodać czy nie. Zastosowanie samego:
  1. while( substr($w[i], -2) == '00' ) {
  2. $w[i] = substr($w[i], 0, -2);
  3. }
gubi nam informację czy dodać to zero na początku czy nie. Nie wiemy bowiem ile razy się wykona i czy choć raz. Jeśli zaś dodamy dokładanie owego zera wewnątrz pętli while to może nam je dodać kilka razy a tego nie chcemy. Ma dodać tylko jednokrotnie.

EDIT: No i mnie ubiegli z wyrażeniem regularnym (IMG:style_emoticons/default/winksmiley.jpg) A poza tym tak patrzyłem i w sumie do-while tu może być, bo przebiega całość przynajmniej raz (IMG:style_emoticons/default/smile.gif) Które jest szybsze to trzeba by sprawdzić.

Ten post edytował thek 23.09.2009, 14:00:27
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 23:16