Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]str_replace problem, na przykładzie skryptu z manuala
kleszczoscisk
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


  1. <?php
  2. $phrase  = strtolower($item_info['describe_long']);
  3. $healthy =  file("anchors.txt");
  4. $yummy =  file("links.txt");
  5. echo str_replace($healthy, $yummy, $phrase);
  6. ?>


... i nie działa (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Dlaczego ?
W zmiennej $item_info['describe_long'] jest kilka linijek tekstu.
Wszystkie pliki kodowane tak samo.
Chmod plików tekstowych 755

Przykład z manuala:
  1. <?php
  2. // Provides: You should eat pizza, beer, and ice cream every day
  3. $phrase  = "You should eat fruits, vegetables, and fiber every day.";
  4. $healthy = array("fruits", "vegetables", "fiber");
  5. $yummy   = array("pizza", "beer", "ice cream");
  6. $newphrase = str_replace($healthy, $yummy, $phrase);
  7. ?>


Ten post edytował kleszczoscisk 18.07.2009, 21:46:33
Go to the top of the page
+Quote Post
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Proszę nadać tytuł tematu!
Go to the top of the page
+Quote Post
planet
post
Post #3





Grupa: Zarejestrowani
Postów: 61
Pomógł: 6
Dołączył: 15.07.2009
Skąd: Śląsk->Ruda Śląska

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


bo str_replace działa chyba tylko na stringi [nie pamiętam dokładnie] a funkcja file() tworzy tablice.

Ten post edytował planet 18.07.2009, 21:40:47
Go to the top of the page
+Quote Post
flashdev
post
Post #4





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(planet @ 18.07.2009, 22:39:45 ) *
bo str_replace działa chyba tylko na stringi [nie pamiętam dokładnie] a funkcja file() tworzy tablice.


Chyba nie:
Cytat
mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )



Cytat(kleszczoscisk @ 18.07.2009, 22:29:32 ) *
  1. <?php
  2. $phrase  = strtolower($item_info['describe_long']);
  3. $healthy =  file("anchors.txt");
  4. $yummy =  file("links.txt");
  5. echo str_replace($healthy, $yummy, $phrase);
  6. ?>


... i nie działa (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)
Dlaczego ?
W zmiennej $item_info['describe_long'] jest kilka linijek tekstu.
Wszystkie pliki kodowane tak samo.
Chmod plików tekstowych 755

Przykład z manuala:
  1. <?php
  2. // Provides: You should eat pizza, beer, and ice cream every day
  3. $phrase  = "You should eat fruits, vegetables, and fiber every day.";
  4. $healthy = array("fruits", "vegetables", "fiber");
  5. $yummy   = array("pizza", "beer", "ice cream");
  6. $newphrase = str_replace($healthy, $yummy, $phrase);
  7. ?>


Pewnie nie działa bo elementy tablicy zawierają entery ("\n").
Kod
for($i=0;$i<count($healthy);$i++){
$healthy[$i]=trim($healthy[$i]);
}


Przy okazji bardzo chętnie dowiem się jak wykonywać jedną funkcję na całej tablicy przy użyciu jakiejś specjalnej funkcji php, która napewno istnieje tylko jej nazwy nie znam.

Ten post edytował flashdev 18.07.2009, 21:49:52
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #5





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Czyli lepiej w plikach .txt rozdzielic słowa przecinkiem (np) i utworzyć tablicę funkcją explode ?

Tablicę tworzy funkcja file(), a czy przy okazji dodaje "\n" tego nie wiem ... pliki .txt wyglądają tak:

Kod
malarze
rzeźbiarze
ceramicy
biżuternicy
graficy


Ten post edytował kleszczoscisk 18.07.2009, 21:58:28
Go to the top of the page
+Quote Post
flashdev
post
Post #6





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(kleszczoscisk @ 18.07.2009, 22:53:47 ) *
Czyli lepiej w plikach .txt rozdzielic słowa przecinkiem (np) i utworzyć tablicę funkcją explode ?


Tego nie powiedziałem.
Myśle, że są jeszcze conajmniej kilka-kilkanaście sensownych sposobów.
Lepsze będą niewątpliwie sposoby, które wykonuą szybciej swoje zadanie oraz zajmują mniej pamięci.

Co to tego pierwszego aspektu odsyłam do mojej klasy do pomiaru czasu wykonywania kodu -> Temat: klasa_timer
Go to the top of the page
+Quote Post
kipero
post
Post #7





Grupa: Zarejestrowani
Postów: 233
Pomógł: 50
Dołączył: 28.10.2006
Skąd: Radom

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


Cytat(flashdev @ 18.07.2009, 22:48:42 ) *
Przy okazji bardzo chętnie dowiem się jak wykonywać jedną funkcję na całej tablicy przy użyciu jakiejś specjalnej funkcji php, która napewno istnieje tylko jej nazwy nie znam.


array_map" title="Zobacz w manualu PHP" target="_manual
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #8





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Cytat(flashdev @ 18.07.2009, 22:58:28 ) *
Lepsze będą niewątpliwie sposoby, które wykonuą szybciej swoje zadanie oraz zajmują mniej pamięci.


No ale utworzenie tablicy z pliku i podmiana ciągu znaków przy pomocy tych funkcji, które próbuję chyba jest OK ? Ale po drodze gdzieś jest jakiś błąd... nie wiem gdzie i jaki.
Go to the top of the page
+Quote Post
flashdev
post
Post #9





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Cytat(kleszczoscisk @ 18.07.2009, 22:53:47 ) *
Tablicę tworzy funkcja file(), a czy przy okazji dodaje "\n" tego nie wiem ... pliki .txt wyglądają tak:

Kod
malarze
rzeźbiarze
ceramicy
biżuternicy
graficy


Kod
<?php
$phrase  = strtolower($item_info['describe_long']);
$healthy =  sru(file("anchors.txt"));
$yummy =  sru(file("links.txt"));
echo str_replace($healthy, $yummy, $phrase);
?>

function sru($tab){
for($i=0;$i<count($tab);$i++){
$tab[$i]=trim($tab[$i]);
}
}
?>


Cytat(kipero @ 18.07.2009, 22:58:30 ) *


Dziękuję, zapamiętam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

W takim razie mała poprawka kodu na bardziej wydajny:

Kod
<?php
$phrase  = strtolower($item_info['describe_long']);
$healthy =  array_map('trim', file("anchors.txt"));
$yummy =  array_map('trim', file("links.txt"));
echo str_replace($healthy, $yummy, $phrase);
?>


Ten post edytował flashdev 18.07.2009, 22:04:54
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #10





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


DZIAŁA ! (IMG:http://forum.php.pl/style_emoticons/default/guitar.gif)
Wielkie dzięki i dobrej nocy !


Ten post edytował kleszczoscisk 18.07.2009, 22:08:52
Go to the top of the page
+Quote Post

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: 23.08.2025 - 17:54