Script tutte le combinazioni maiuscole e minuscole di una parola

  • Creatore Discussione Creatore Discussione maced
  • Data di inizio Data di inizio

maced

Utente Attivo
30 Nov 2011
48
0
6
Faccio un esempio prendiamo la parola "prova"
Devo proporre tutte le combinazioni fra maiuscole e minuscole della parola

Prova
PRova
pRoVa
prova
ProvA

Ecc ecc spero di esser stato chiaro

Datemi uno spunto
 
Sono riuscito a tirarti fuori una funzioncina in 5 minuti, mi sembra funzioni a dovere ma se così non fosse almeno hai uno spunto di partenza:
PHP:
function allCasesOf($word) {

    $wordLen = strlen($word);

    $word = strtolower($word);
    $wordList = array($word, strtoupper($word));

    for ($j = 0; $j < $wordLen; ++$j) {
        for ($i = 0; $i < $wordLen; ++$i) {
            for ($z = 0; $z <= $j; ++$z)
                if (isset($word{$i+$z}))
                    $word{$i+$z} = strtoupper($word{$i+$z});
            
            if (!in_array($word, $wordList, true))
                $wordList[] = $word;
                
            $word = strtolower($word);
        }
    }

    $word = strtoupper($word);

    for ($j = 0; $j < $wordLen; ++$j) {
        for ($i = 0; $i < $wordLen; ++$i) {
            for ($z = 0; $z <= $j; ++$z)
                if (isset($word{$i+$z}))
                    $word{$i+$z} = strtolower($word{$i+$z});
            
            if (!in_array($word, $wordList, true))
                $wordList[] = $word;
                
            $word = strtoupper($word);
        }
    }
    
    return $wordList;
}

Utilizzo:
PHP:
print_r(allCasesOf("eva"));

/* Output

Array
(
    [0] => eva
    [1] => EVA
    [2] => Eva
    [3] => eVa
    [4] => evA
    [5] => EVa
    [6] => eVA
    [7] => EvA
)

*/
 
Sono riuscito a tirarti fuori una funzioncina in 5 minuti, mi sembra funzioni a dovere ma se così non fosse almeno hai uno spunto di partenza:
PHP:
function allCasesOf($word) {

    $wordLen = strlen($word);

    $word = strtolower($word);
    $wordList = array($word, strtoupper($word));

    for ($j = 0; $j < $wordLen; ++$j) {
        for ($i = 0; $i < $wordLen; ++$i) {
            for ($z = 0; $z <= $j; ++$z)
                if (isset($word{$i+$z}))
                    $word{$i+$z} = strtoupper($word{$i+$z});
            
            if (!in_array($word, $wordList, true))
                $wordList[] = $word;
                
            $word = strtolower($word);
        }
    }

    $word = strtoupper($word);

    for ($j = 0; $j < $wordLen; ++$j) {
        for ($i = 0; $i < $wordLen; ++$i) {
            for ($z = 0; $z <= $j; ++$z)
                if (isset($word{$i+$z}))
                    $word{$i+$z} = strtolower($word{$i+$z});
            
            if (!in_array($word, $wordList, true))
                $wordList[] = $word;
                
            $word = strtoupper($word);
        }
    }
    
    return $wordList;
}

Utilizzo:
PHP:
print_r(allCasesOf("eva"));

/* Output

Array
(
    [0] => eva
    [1] => EVA
    [2] => Eva
    [3] => eVa
    [4] => evA
    [5] => EVa
    [6] => eVA
    [7] => EvA
)

*/
per 5 minuti xD, comunque propongo un'alternativa
PHP:
function combo($parola)
{
    $combo = array(strtolower($parola),strtoupper($parola));
    $l = strlen($parola);
    $dl=1;

    while($dl<=$l)
    {
       for($i=0;$i<$l;$i++)
          $combo[] = strtolower(substr($parola,0,$i)).strtoupper(substr($parola,$i,$dl)).strtolower(substr($parola,$i+$dl,$l));
       for($i=0;$i<$l;$i++)
           $combo[] = strtoupper(substr($parola,0,$i)).strtolower(substr($parola,$i,$dl)).strtoupper(substr($parola,$i+$dl,$l));
           $dl++;
    }

    return array_values(array_unique($combo));
}
 
Ultima modifica di un moderatore:
Era per dire che non ci ho speso molte energie e che avrebbe potuto esserci qualche bug di sorta.
Molto snella comunque la tua soluzione, mi piace :)
 
se provo con "ciao mamma ciao", lo script non prende in considerazione esempio "Ciao mamma Ciao"
 

Discussioni simili