Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zastąpienie tekstu innym tekstem
Forum PHP.pl > Forum > Przedszkole
L_Devil
Nie jestem taki głupi, do manuala zajrzałem, funkcję str_replace" title="Zobacz w manualu php" target="_manual znalazłem smile.gif Tylko że to nie rozwiązuje mojego problemu...

Otóż mam taki problem: Mam tablicę x-elementową jednych stringów, oraz tablicę x-elementową drugich stringów. Chciałbym pierwsze wystąpienie któregokolwiek z pierwszej tablicy, zastąpić odpowiednim ciągiem z drugiej. Przy czym chodzi mi tylko o podmienienie tego, który się jako pierwszy pojawi w tekście i tylko jego pierwsze wystąpienie. Czy to jest w ogóle możliwe, a jeżeli tak to jak? Nie mam już zupełnie pomysłu jak to zrobić...
strife
Jeśli chodzi o podmienianie w tablicy to strtr" title="Zobacz w manualu php" target="_manual...
L_Devil
Nie, przeczytałem opis tej funkcji, chodzi mi o coś innego. Może wyłożę problem jaśniej:

  1. <?php
  2. $zmienna = "kot jest boski, bo każdy wie że kot jest boski! biggrin.gif "
  3. $tablica1 = array("boski", "kot");
  4. $tablica2 = array("beznadziejny", "pies");
  5. /* Tutaj funkcja której nie mam i po której: */
  6. $zmienna = "pies jest boski, bo każdy wie że kot jest boski! biggrin.gif "
  7.  
  8. ?>
O coś takiego mi chodzi smile.gif Pierwsze pojawienie się któregokolwiek z pierwszej tablicy na rzecz odpowiedniego z drugiej tablicy smile.gif I tylko jedno podmienione...
RenePL
Dzieki Scarface doszedłem do tego

Moj skrypt wyglada tak
Zamienia z duzych na male i likwiduje niedozwolne znaki

  1. <?php
  2.  
  3. $tekst = "^&Created &@ bY*() ReNE";
  4.  
  5. $z = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  6. $na= "abcdefghijklmnopqrstuvwxyz";
  7. $tekst = strtr($tekst, $z, $na);
  8. $z = "!~`@#$%^&*()_-+=|}]{[';:?/>.<,";
  9. $na = "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
  10. $tekst= strtr($tekst, $z, $na);
  11. $tekst = str_replace("@", '', $tekst);
  12.  
  13. echo "nazwa uzytkownika z małych liter i usuniete zle znaki wynik = <br> $tekst :-)";
  14.  
  15.  
  16. ?>

Wynik created by rene
mike
  1. <?php
  2.  
  3. function F( $strText, $arrFind, $arrReplace )
  4. {
  5. $arrTextTab = str_word_count( $strText, 1 );
  6.  
  7. foreach( $arrTextTab as $intKey => $strValue )
  8. {
  9. if( in_array( $strValue, $arrFind ) )
  10. {
  11. $arrKeys = array_keys( $arrFind, $strValue );
  12. return str_replace( $strValue, $arrReplace[ $arrKeys[ 0 ] ], $strText );
  13. }
  14. }
  15. return $strText;
  16. }
  17.  
  18. $strText = 'To jest jakiś tekst o psach i kotach. Albo może i o bananach';
  19. $arr = array( 'pies', 'psach', 'kotach' );
  20. $arr1 = array( 'kot', 'kotach', 'psach' );
  21. echo F( $strText, $arr, $arr1 );
  22.  
  23. ?>
L_Devil
Mike_Mech, to jest prawie to o co mi chodziło, z jednym wyjątkiem:

jeżeli ciąg będzie:
  1. <?php
  2. $strText = 'To jest pies, czyli jakiś tekst o psach, psach i kotach. pies na to patrzy :)';
  3.  
  4. ?>
To wynikim działania będzie:
  1. <?php
  2. $strText = 'To jest kot, czyli jakiś tekst o psach, psach i kotach. kot na to patrzy :)';
  3. ?>
Czyli drugie pojawienie się 'pies' też zostało wycięte dry.gif




[Edit] Ha! Opłaca się czytać manual! Funkcja preg_replace" title="Zobacz w manualu php" target="_manual ma opcjonalny argument - limit wykonywanych operacji biggrin.gif

Gdyby kogoś interesowało, poprawiony kod:
  1. <?php
  2.  
  3. function F( $strText, $arrFind, $arrReplace )
  4. {
  5. $arrTextTab = str_word_count( $strText, 1 );
  6.  
  7. foreach( $arrTextTab as $intKey => $strValue )
  8. {
  9. if( in_array( $strValue, $arrFind ) )
  10. {
  11. $arrKeys = array_keys( $arrFind, $strValue );
  12. return preg_replace( "/" . $strValue . "/", $arrReplace[ $arrKeys[ 0 ] ], $strText, 1);
  13. }
  14. }
  15. return $strText;
  16. }
  17.  
  18. $strText = 'To jest jakiś tekst o psach i kotach. Albo może i o bananach';
  19. $arr = array( 'pies', 'psach', 'kotach' );
  20. $arr1 = array( 'kot', 'kotach', 'psach' );
  21. echo F( $strText, $arr, $arr1 );
  22.  
  23. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.