Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [str_replace] Podmiana znaku na wynik funkcji...
Forum PHP.pl > Forum > PHP
Szymon
Witam,


Chcialbym przy uzyciu funkcji str_replace() podmienic ciag znakow na wynik funkcji, np:

  1. <?php
  2. str_replace('abc',funkcja(),$string);
  3. ?>


Przykladowa funkcja wyglada tak:

  1. <?php
  2. function funkcja(){
  3.  
  4. @include ('plik.php');
  5. $buf = ob_get_contents();
  6.  
  7. return $buf;
  8.  
  9. }
  10. ?>


Teraz, problem polega na tym, ze plik 'plik.php' jest includowany nawet, kiedy funkcja nie powinna zostac wywolana - czyli, kiedy w $string nie ma znakow 'abc', i tak wlasciwie sie dzieje, bo nie jest zwracany zaden wynik, ale plik 'plik.php' zostaje mimo wszystko includowany, co widze kiedy wywolam:

  1. <?php
  2. $ifiles=get_included_files(); print_r($ifiles);
  3. ?>


Czy da sie jakos uniknac includowania 'nieproszonych' plikow?
Chcialbym, zeby includowaly sie tylko wtedy kiedy funkcja rzeczywiscie zostanie wywolana.


Z gory dziekuje za pomoc!
Norbas
Cytat
Teraz, problem polega na tym, ze plik 'plik.php' jest includowany nawet, kiedy funkcja nie powinna zostac wywolana...

Jest wywoływana smile.gif. Gdy interpreter napotka instrukcję
Kod
str_replace('abc',funkcja(),$string);

to ją wykonuje, czyli m.in. wywołuje funkcję funkcja()
Cytat
Czy da sie jakos uniknac includowania 'nieproszonych' plikow?

Zdefiniuj dodatkową funkcję, która przed wykonaniem zastępowania znaków sprawdzi czy $string zawiera ciąg znaków do zamiany
Szymon
Ok, ale kiedy mam takich funkcji 40? smile.gif

Moge dodac instrukcje, ktora 40 razy bedzie sprawdzac, czy taki string wystepuje, ale czy nie jest to niepotrzebne przymulanie skryptu?
misiek172
weź dodaj tu poprostu:

  1. <?php
  2. str_replace('abc',funkcja('abc'),$string);
  3. ?>


  1. <?php
  2. function funkcja($xx){
  3.  
  4. if($xx!='' && $xx!=' '){
  5.  
  6. @include ('plik.php');
  7. $buf = ob_get_contents();
  8. return $buf;
  9.  
  10. }else{
  11.  return false; // czy tam exit... niewiem co zatrzymuje str_replace... 
  12.  // poprostu wywołaj błąd biggrin.gif a str_replace poprzedź @
  13. }
  14.  
  15. }
  16. ?>
Szymon
Niestety, nie dziala. Ten sam efekt...
Norbas
Cytat
Ok, ale kiedy mam takich funkcji 40?

Naprawdę musisz dołączać 40 plików?

Przed wywołaniem instrukcji str_replace powinieneś wstawić instrukcję warunkową:
  1. <?php
  2. if (strpos($string, 'abc') !== false)
  3. str_replace('abc',funkcja(),$string);
  4. ?>


Cytat
Moge dodac instrukcje, ktora 40 razy bedzie sprawdzac, czy taki string wystepuje, ale czy nie jest to niepotrzebne przymulanie skryptu?

Zdecydowanie więcej czasu zajmie dołączanie plików niż wykonywanie instrukcji if
Szymon
Dzieki, tak zrobie.

Ktora mozliwosc bedzie mniejszym obciazeniem dla procesora:

  1. <?php
  2. if(stristr($string,'abc'))
  3. $string= str_replace('abc',funkcja(),$string);
  4. ?>


Czy wspomniane przez Ciebie:

  1. <?php
  2. if (strpos($string, 'abc') !== false)
  3. $string = str_replace('abc',funkcja(),$string);
  4. ?>
Kicok
Cytat("manual - strstr()")
Notatka: If you only want to determine if a particular needle occurs within haystack, use the faster and less memory intensive function strpos()" title="Zobacz w manualu PHP" target="_manual instead.
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.