Autor Zpráva
regvac
Profil *
Ahoj,
potřeboval bych poradit, jak proložit výraz v nějaké proměnné náhodnými znaky a pak funkci vracející vše zpět. Chtěl bych mezi každý znak v textu vložit jeden další.

V podstatě jde o princip zašifrovat a dešifrovat s tím, že kdo zná šifru ji sám dešifruje bez nutnosti použít nějaký dešifrovací klíč. V mém případě já budu vědět, že původní text byl tvořen každým lichým znakem.

Např. mám v proměnné $text = "ahoj" a chtěl bych z něj udělat třeba $text = "a1h2o3j4". A pak podobně udělat opak, tedy z "a1h2o3j4" udělat "ahoj". Postačí mi klidně jen tento případ (1 znak vložit za každý stávající znak). Nepotřebuji nějaké univerzální udělátko.


Děkuji.
pmasarik
Profil
$t = str_split('ahoj');
$x = '';
foreach ($t as $key=>$value) {
  $x .= $key.$value;
}
echo $x;

$y = str_split($x);
$z = '';
foreach ($y as $key=>$value) {
  if ($key%2) {
    $z .= $value;
  }
}
echo $z;
regvac
Profil *
Dík, asi to funguje v jiné verzi PHP než co mám, PHP4. Jde to pro PHP4. Zkoušel jsem explode, ale nejde u něj nastavit "" pro rozdělení.
pmasarik
Profil
Dík, asi to funguje v jiné verzi PHP než co mám, PHP4. Jde to pro PHP4. Zkoušel jsem explode, ale nejde u něj nastavit "" pro rozdělení.

Kde vidíš funkciu explode???
Tá je nepoužiteľná v tvojom prípade, preto existuje funkcia str_split ktorá robí to čo chceš.

EDIT: Nepochopil som na prvý krát tvoju vetu a je to pre PHP5
pmasarik
Profil
Sorry, nepochopil som tvoju vetu, str_split funguje až od PHP5
Str4wberry
Profil
Kdyby se ten znak, kterým prokládáš, nemusel měnit, vystačil by sis s funkcí wordwrap.
regvac
Profil *
Už jsem si našel řešení:
$t = preg_split("//", 'ahoj', -1, PREG_SPLIT_NO_EMPTY);
AM_
Profil
tohle mi přijde dost těžkopádné, navíc to neproloží náhodnými znaky, ale posloupností čísel 1-n
$str = 'ahoj';
$result = '';
for ($i = 0; $i < strlen($str); $i++){
  $result .= $str[$i] . chr(65+rand(0, 25)); //vlozi jedno pismenk z $str a jedno nahodne pismenk
}
echo $result // "a?h?o?j?"; - otazniky sou nahodna pismena
$zpatky = '';
for ($i = 0; $i < strlen($result); $i+=2){
  $zpatky = $result[$i];
}
echo $zpatky; //$zpatky je 'ahoj';

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: