[php] zamiana znaków

0

Witam

Mam skrypt, który z bazy mysql pobiera wyrazy i wypisuje je w lini dla każdego użytkownika.

np dom kotek pistolet

Każdy

<?php
function lacz_bd()
{
  $db = new mysqli('localhost', '', '', '');
    if (! $db)
      return false;
   $db->autocommit(TRUE);
   return $db;
}

$db = lacz_bd();
$login = $_POST['login'];
$zapytanie = "select slowo1, slowo2, slowo3, slowo4  from gra where username='$login'");

$wynik = $db->query($zapytanie);

echo '<table>';

        {$wiersz = $wynik->fetch_assoc();
                echo '<tr>';
                echo '<td>'.$wiersz['slowo1'].'</td>';
                echo '<td>'.$wiersz['slowo2'].'</td>';
                echo '<td>'.$wiersz['slowo2'].'</td>';
                echo '<td>'.$wiersz['slowo2'].'</td>';
                echo '</tr>';
        }
echo '</table>';

?>

I teraz chciałbym zrobić zamianę znaków z tych słów

tzn dla i - 3
p - j
s - l
e - m

i byłoby dom kotmk j3ltolet

i tak dla każdej cyfry z alfabetu która by zamieniała ta wyrazy na to, które ja zakoduje i wyświetlała je.

Znalazłem kod "kodowania"

$dlugosc_tekstu = strlen($tekst);



for ($i=0;$i<=$dlugosc_tekstu;$i++)

{

 $znak = strval($tekst[$i]);



 if ($znak == "A")

   echo "B";

 elseif ($znak == "C")

   echo "D";

 elseif ($znak == "E")

   echo "F";

 else

   echo $znak;

}

Ale to chyba zbyt czastochłonne bo bym musiał każdą zmienną przpisac do innej zmiennej itp.

Może takie kodowanie da rade zrobić jakoś prościej i szybciej ??

proszę o pomoc

0

W czym tkwi problem ? Gdzie pytanie ? :P

0

strtr

0

Pytanie ?? jak odwołać się jednocześnie to tych wszystkich zmiennych

  echo '<td>'.$wiersz['slowo1'].'</td>';
                echo '<td>'.$wiersz['slowo2'].'</td>';
                echo '<td>'.$wiersz['slowo2'].'</td>';
                echo '<td>'.$wiersz['slowo2'].'</td>'; 

Nav zaraz sobie poszukam o tym

Chyba sobie coś wygooglałem

<?php
$a = 'Zażółć gęślą jaźń';
$cenzura = array('ą', 'ć', 'ł', 'ó', 'ś', ' ', 'ę', 'ń', 'ż', 'ź' );
$zamiana = array('a', 'c', 'l', 'o', 's', '_', 'e', 'n', 'z', 'z' );
$a=str_replace( $cenzura, $zamiana, $a);
echo $a; // Zazolc_gesla_jazn
?>

Powinno zadziałać u mnie

0

Nie wiem czy dobrze rozumiem, ale może być tak:

$jakis_tekst="dom kotek pistolet";

$do_zmiany=array("i", "p", "s", "e"); //znaki ktore chcesz zamienic
$zmienione= array("3", "j", "l", "m"); // i znaki 'do wymiany'

for($i=0;$i<=((count($do_zmiany)-1));$i++) // dla każdego elementu tablicy $do_zmiany
// indeksowanie zaczyna się od 0, więc trwa do osiągniącia przez $i watości o 1 mniejszej od ilości elementów w tablicy $do_zmiany
if(ereg($do_zmiany[$i], $jakis_tekst)) // sprawdź czy dany znak istnieje w danym tekście
$jakis_tekst=str_replace($do_zmiany[$i], $zmienione[$i], $jakis_tekst); //jeżeli tak, to zamień na przypadający jej znak w tablicy $zmienione

Oczywiście możesz w tablicy zamiast jednego słowa dać całe zdania ;]

PS) kod pisałem z pamięci, może coś nie zatrybić ;]

0
  1. ereg jest wolny, preg jest szybszy. Zreszta do takich celow starczy zwykly strpos. Tylko po co, skoro jest liniowy, tak samo jak strtr, który tu jest lepszy bo zamieniane są pojedyncze znaki a nie całe słowa.
  2. Wersja tablicowa strtr jest wolniejsza niż wersja na stringach - strtr("abc", "xyz", $s). A działa tak samo.
  3. Count w każdym przelocie pętli? Nie ma to jak wydajność.

1 użytkowników online, w tym zalogowanych: 0, gości: 1