Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]str_replace nie działa poprawnie na tablicy
Forum PHP.pl > Forum > Przedszkole
casperii
Panowie o co chodzi , próbuje przy pomocy str_replace podmieniać ciąg znaków niestety zbyt dosłownie mi te ciągi zmienia smile.gif

  1. $stare = array("1","11","12");
  2. //$stare = array(1,11,12);
  3. $zamien = array('jeden','jedenascie','dwanascie');
  4.  
  5. str_replace($stare, $zamien, $row['numerek']);


bo jeżeli mam numerek 11 to zamiast jedenascie pokazuje mi jedenjeden sad.gif

Czy da się w jakiś inny sposób to wykonać ?
dublinka
str_replace tak nie zadziała na tablicach.

  1. <?php
  2. $arr = array(
  3. "1" => "jeden",
  4. "11" => "jedenascie",
  5. "111" => "sto jedenaście",
  6. "1111" => "tysiąc sto jedenaście",
  7. "222" => "dwieście dwadzieścia dwa",
  8. "pięćset" => "500",
  9. "euro" => "€"
  10. );
  11.  
  12. $words = "Była sobie 1 kura, 11 świń, 111 krów i 1111 kurczaków. Wszystko poszło na 222 ruszty. Za to zarobiliśmy euro500";
  13. echo strtr($words, $arr);
  14. ?>


Co zwróci nam

  1. Była sobie jeden kura, jedenascie świń, sto jedenaście krów i tysiąc sto jedenaście kurczaków. Wszystko poszło na dwieście dwadzieścia dwa ruszty. Za to zarobiliśmy 500
casperii
no dobra to chyba lepiej już by było to robić poprzez funkcję chyba ?

w bazie mam numerki 1,2,11

teraz te numerki musiał bym wprowadzić do funkcji i wyciągnąć "tłumaczenie"

czyli to by wyglądało jakoś tak :

  1. function przetlumaczmi($numerek){
  2. ...('select * from tlumaczenia where numerek in ($numerek)');
  3.  
  4. //pętla
  5.  
  6. return wyniki
  7. }


dobrze myślę @dublinka ?
dublinka
Musialbys uzyc gotowych klas albo cos w tym rodzaju jak ponizej.

https://stackoverflow.com/questions/277569/...o-a-word-in-php

Mozesz tez cos takiego uzyc tylko przerob to dla swoich danych:


  1. <?php
  2. // end() pobiera ostatni index z tablicy i podstawiany jest do petli.
  3. // Nie wiem jak Ty tam masz wiec jest tak ze ustalilem iz ostatni index jest najwekszy
  4.  
  5. $numbers = array(1, 11, 51, 77, 20, 33, 111);
  6. $to_words = array('1' => 'jeden', '11' => 'jedenascie', '33' => 'trzydziesci trzy', '20' => 'dwadziescia', '111' => 'sto jedenascie');
  7.  
  8.  
  9. for($i=0; $i<=(end($numbers)); $i++)
  10. {
  11. if(isset($numbers[$i]))
  12. {
  13. if(array_key_exists($numbers[$i], $to_words))
  14. {
  15. echo $to_words[$numbers[$i]] . '<br>';
  16. }
  17. }
  18. }
  19.  
  20. ?>
Neutral
  1. <body style="background: darkgoldenrod;">


  1. <?php
  2.  
  3. $data_from_db = "1 sdfsdf 11 12 1 11 tree.";
  4.  
  5.  
  6. $old = array("1","11","12");
  7. $rep = array('jeden','jedenascie','dwanascie');
  8.  
  9. if(count($old) == count($rep)) {
  10. $quantity = count($old);
  11. } else {
  12. $quantity = 0;
  13. }
  14.  
  15. for($i=0;$i<$quantity;$i++) {
  16. $old[$i] = '@\b'.$old[$i].'\b@';
  17. $rep[$i] = '<span style="color: green;">'.$rep[$i].'</span>';
  18. }
  19.  
  20.  
  21. echo preg_replace($old, $rep, $data_from_db); // jeden sdfsdf jedenascie dwanascie jeden jedenascie tree.
  22.  
  23. ?>


  1. </body>


Jest jeszcze preg_filter, ale jak sama nazwa wskazuje - filtruje dane, czyli nie wszystkie z wejścia może znaleźć się na wyjściu.
dublinka
Tylko ze kolega nie chce zamieniac w tekscie tylko na 2 tablicach lub jedne dane z bazy jako tablica liczb ktora ma miec dpowiedniki jako wyrazy.
W Twoim przypadku $old ma sie zamienic na $ret.

Kolega tez nie napisal czy jedna i druga tablica ma ten sam uklad czy "byle jak"
Zrobilem przyklad wyzej i dziala nawet jak ma dane porozrzucane ale jedna wazna rzecz. Petla musi sie wykonac maksymalna loczbe razy ; identyczna z najwieksza wartoscia z tablicy bo nie wiem jak On ma to poukladane.
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.