Autor Zpráva
nethor
Profil
Jak se dají přehodit písmena v řetězci (asi pomocí reguláru) , 1. za 2., 3 za 4. , atd.. aby to fungovalo při různé délce slov? :
$slovo=  "123456";
$vysledek = "214365";
// nebo
$slovo=  "abcdef";
$vysledek = "badcfe";
whoami
Profil
<?php

    function foo ( $string = '' ) {
        $return = '';
        $tmp = str_split($string, 2);
        foreach ( $tmp as $part ) {
            $return .= strrev($part);
        }
        return $return;
    }
    
    echo foo('123456')."\n"; // 214365
    echo foo('abcdef')."\n"; // badcfe

?>
Tori
Profil
Funkce od whoami* se dá mírně zrychlit použitím funkcí pro pole:
function foo ( $string = '' ) {
    $tmp = array_map('strrev', str_split($string, 2));
    return implode('', $tmp);
}
, ale obě se dají použít jen pro jednobajtové znaky. O něco lepší (a vhodné pro vícebajtové znaky) je použít regulár (funkce počítá s tím, že vstupní řetězec bude v utf-8):
function presypZnaky($str = '') {
    return preg_replace('~(.)(.)~u', '$2$1', $str);
}
edit: Na druhou stranu - funkce s rozdělením do pole se snadněji upraví pro nastavitelný počet znaků (= v každé části, která se má otočit zadem dopředu), u funkce s regulárem by se musel regulár i nahrazení generovat dynamicky, čímž by ztratila trochu na přehlednosti.

* whoami: Skloňujete se nebo ne? :-)
whoami
Profil
Tori:
Co se týče skloňování jména, tak podle pravidel anglického jazyka. (Tedy příkazů pro BASH)
A co se týče řešení, tak bych se sklonil k vašemu, ke kterému bych také došel. Pro svou aplikaci bych věnoval více přemýšlení.
nethor
Profil
Tori:
preg_replace('~(.)(.)~u', '$2$1', $str);

To je přesně ono. (Jak prosté:-)

Díky!

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: