Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]str_replace problem
Forum PHP.pl > Forum > Przedszkole
kleszczoscisk
  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 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. ?>
Spawnm
Proszę nadać tytuł tematu!
planet
bo str_replace działa chyba tylko na stringi [nie pamiętam dokładnie] a funkcja file() tworzy tablice.
flashdev
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 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.
kleszczoscisk
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
flashdev
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
kipero
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
kleszczoscisk
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.
flashdev
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 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);
?>
kleszczoscisk
DZIAŁA ! guitar.gif
Wielkie dzięki i dobrej nocy !
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.