Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP - zámena řetězců

Děláš Caesarovu šifru? :-).
Jednoduché řešení:

<?php
$key = array('a' => 'f','b' => 'g','c' => 'h','d' => 'i','e' => 'j','f' => 'k','g' => 'l','h' => 'm','i' => 'n','j' => 'o','k' => 'p','l' => 'q','m' => 'r','n' => 's','o' => 't','p' => 'u','q' => 'v','r' => 'w','s' => 'x','t' => 'y','u' => 'z','v' => 'a','w' => 'b','x' => 'c','y' => 'd','z' => 'e', '_' => '_');

$zadani = 'nejaky_nesmyslny_text';//$_GET['zadani'];
$delka = strlen($zadani);
$zadani_new = '';

 for($i=0;$i<$delka;$i++)
 {
   $zadani_new .= $key[$zadani[$i]];
 }

echo $zadani_new;
?>

To pole snad není problém nechat si ho vydegenerovat automaticky:
<?php
echo '$key = array(';
$posunuti = 5; // tohle si upravis, jak budes chtit
for($i=97; $i<=122;$i++)
{
echo "'".chr($i)."' => '";
if($i+$posunuti > 122)  echo chr(($i+$posunuti)-122+96); else  echo chr($i+$posunuti); 
echo "'";
if($i != 122) echo ",";
}
echo ");"
?>
Výstup:
$key = array('a' = > 'f','b' = > 'g','c' = > 'h','d' = > 'i','e' = > 'j','f' = > 'k','g' = > 'l','h' = > 'm','i' = > 'n','j' = > 'o','k' = > 'p','l' = > 'q','m' = > 'r','n' = > 's','o' = > 't','p' = > 'u','q' = > 'v','r' = > 'w','s' = > 'x','t' = > 'y','u' = > 'z','v' = > 'a','w' = > 'b','x' = > 'c','y' = > 'd','z' = > 'e');


Bonus (ber to jako dárek k Velikonocím ;-)). Funkce, která ti to udělá sama:

function caesar_cipher($text,$posunuti)
{
$text_new = '';
$key = array();
 for($i=97; $i<=122;$i++)
 {
  $key[chr($i)] = ($i+$posunuti > 122) ? chr(($i+$posunuti)-122+96) : chr($i+$posunuti);
 }

$key[' '] = '_';
$text = strtolower($text);

 for($i=0;$i<strlen($text);$i++)
 {
  $text_new .= $key[$text[$i]];
 }
return $text_new;
}


echo caesar_cipher('Nejaky text o nicem',15); //vrati "ctypzn_itmi_d_cxrtb"

Je to napsaný trochu prasácky (PHPčka jsem se nedotknul pár měsíců), ale hlavně, že to funguje :-).

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny