Jak zamienic miejscami co dwa znaki ?

0

mam string np
$napis = "raz dwa"
I chcialbym zamienic co dwa znaki ze soba zeby bylo
$napis = "ar zwda"
Jesli jest nieparzysta ilosc to ma odcinac ostatni znak i zamienic tylko te parzyste
a jesli jest parzysta ma zamieniac wszystko
Jk to zrobic w jednej petli ? da sie ?

1

coś namieszałeś z tym odcinaniem, bo w przykładzie który podałeś jest 7 znaków i w odpowiedzi również 7.
pewnie coś takiego będzie (nie sprawdzane):

$dl =floor(strlen($napis)/2)*2; // dzieki takiemu zapisowi dlugosc bedzie parzysta
for ($i=0; $i<$dl; $i+=2)
{
  $tmp = $napis[$i];
  $napis[$i] = $napis[$i+1];
  $napis[$i+1] = $tmp;
}

pewnie da się jakoś szybciej, ale dla krótkich tekstów nie powinno mieć to znaczenia

4

ja proponuję taki kod:

$napis = preg_replace('|(.)(.)|', '$2$1', $napis);

głównie dlatego że występują w nim cycki

0

A to czy taki kod na przyklad tez mozna zamienic na jedna linijke z uzyciem preg_replace ?

         
for($i = 0; $i <= $length - 1; $i++) {
    $number = ord($mix_str[$i]) + $key;
    if (strlen($number) < 3) { $number = "0".$number; }
    $result .= $number;
}

Generalnie odczytujmey znak , zamieniamy na kod ascii , jesli kod ma dwa znaki doklejamy 0 i idziemy do kolejnego znaku

0

no raczej nie
chyba że takie naciąganie:

$result = preg_replace_callback('/./', function($q) { return str_pad(ord($q[0]) + $key, 3, '0', STR_PAD_LEFT); }, $mix_str);

(dla php < 5.3.0 z użyciem "create_function")
z tym że "$key" nie będzie widoczne w tym miejscu i trzeba by było albo podmienić na $GLOBALS['key'] (nie zalecane), albo podmienić na stałą, albo na odwołanie do własności klasy

ale to bez sensu - a tak poważnie to możesz po prostu skrócić ten kod do:

for($i = 0; $i < $length; $i ++)
{
	$result .= str_pad(ord($mix_str[$i]) + $key, 3, 0, STR_PAD_LEFT);
}
0

Mam jeszcze ostatnie pytanie bo teraz jak chce odwrocci proces i mam kod

for($i = 0; $i < $length; $i++) {
    $make_str .= chr((substr($str, $k, 3) - $key));
    $k = $k + 3;

    //$make_str .= str_pad(chr($str - $key), 3, 0, STR_PAD_LEFT);
    }

Ale jak odkomentuje ten kod to mam same 0 bo w tym stringu $str mamy ciag znakow taki:
065066067
i trzeba je podzielic po 3 cyfry i odmienic to ta funkcja str pad tez by byla do tego dobra ?

0

nie, ale możesz użyć str_split:

foreach(str_split($str, 3) as $kod)
{
    $make_str .= chr($kod - $key);
}

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