ďťż

[PHP] Problem z tablicami i str_replace()

       

Podstrony


telcocafe

Witam
Próbuję napisać prosty skrypt szyfrujący (zamienia podaną literę na następną. Np. podaję "g", a zamieni na "h")
if (isset($_GET['szy']) && !isset($_GET['od'])) { $zamien = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $na = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $ciag = strtolower($_GET['pole']); $zamienione = str_replace($zamien, $na, $ciag); echo("Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"); } else { $na2 = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $zamien2 = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $ciag2 = strtolower($_GET['pole']); $zamienione2 = str_replace($zamien2, $na2, $ciag2); echo("Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione2</b></font>"); }

Co tu może być źle?
Jak wpisze np. "Ekspert" i nacisnę na zaszyfruj to wywala mi "aaaaaa". Jak dam "ekspert" i nacisnę na odszyfruj to wywala mi "djrodqs". (Jak dam "abcde" i nacisnę "odszyfruj" to wywala mi zzbcd. Powinno być "zabcd")Dlaczego nie działa zgodnie z moim zamierzeniem? Co zrobiłem nie tak?
Użytkownik sauron edytował ten post 12 październik 2007, 15:54


Działający kod:
<?php if (isset($_GET['szy']) && !isset($_GET['od'])){ $zamien = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $na = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $ciag = strtolower($_GET['pole']); $array = str_split($ciag); foreach ($array as $znak){ $juz = false; foreach ($zamien as $id => $litera){ if ($znak == $litera & !$juz){ $zamienione .= str_replace($zamien[$id], $na[$id], $znak); $juz = true; } } } echo "Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"; }else{ $zamien = array( 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'a' ); $na = array( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' ); $ciag = strtolower($_GET['pole']); $array = str_split($ciag); foreach ($array as $znak){ $juz = false; foreach ($zamien as $id => $litera){ if ($znak == $litera & !$juz){ $zamienione .= str_replace($zamien[$id], $na[$id], $znak); $juz = true; } } } echo "Ciąg <b>$_GET[pole]</b> to <font color='red' size='4'><b>$zamienione</b></font>"; } ?>
Wydaje mi się, ze str_replace zadziałało jak pętla i a=>b, a później b=>a, ..., aż do z=>a - dlatego zawsze zwracało aaaaa.

Ok thx. Zastanawiałem się też nad odwróceniem kolejności wyrazu. Np. daję 12345, a wywala 54321.
Myślę, że trzeba pokombinować z pętlą For i odliczaniem w dół. Więcej pomysłów nie mam. A jak należałoby wypisywać kolejne litery?

nie chodzi mi tym razem o strrev(). Chodzi o to żeby zrobić to w petli
Użytkownik sauron edytował ten post 12 październik 2007, 17:06
Nie wiem, czy dobrze zrozumiałem, ale chyba chodzi o to:$s = 'abcdefgh'; for ($j=strlen($s)-1; $j>=0; $j--) echo $s{$j}; #bądź substr($s, $j, 1);

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.