her er fx. et eksempel at tage udgangspunkt i:
på adressen
http://www.jooze.dk/ord har jeg lavet et lille php baseret program, der kan generere de "letlæselige" volapyk ord, som alle modtager på sms og mail for tiden. (det med at det 1. og sidste ord skal blive på deres pladser og så kan man bytte om på resten.
fx: det er ikke så svræt at læse krotere ord på dnnee
eller: men lange ord som ssrftsoeenkejr og bnikasarello er sveærre
min kode ser sådan ud:
<?php
// opret array over ord
// php scriptet modtager en varialbel $txt som er den streng der skal behandles
# til dette eksempel er $txt sat i scriptet
$splitter = " ";
$listen = explode ( $splitter, $txt);
// f¿rst opretter jeg et array, der rummer hvert enkelt ord fra s¾tningen i $txt
// t¾l antallet af ord
$antal_ord = count($listen);
// og lad en l¿kke kalde min shuffler funktion, en gang for hvert ord.
for ($i = 0; $i < $antal_ord; $i++) {
// Shuffler funktionen returnerer et array, som jeg konverterer til en streng (med implode)
// hvorefter jeg printer denne streng
print (implode("", shuffler($listen[$i]) ));
// efter denne streng (det enkelte ord), tilf¿jes eventuelt specialtegn (, . ; ? eller !)
// samt et mellemrum.
print ($special." ");
}
// her f¿lger funktionen som foretager selve manipulationen med de enkelte ord
// (bytter rundt pŒ bogstaverne, undtagen det f¿rste og det sidste.
function shuffler($t){
//nulstil tmp
$tmp = array();
// g¿r $special global, sŒ den kan afl¾ses uden for denne funktion
// $special angiver om der er et komme eller lign tegn efter det aktuelle ord,
//og i givet faald hvilket tegn det drejer sig om..
// kunne man her benytte en 'smart' metode til slet og ret at teste for 'non-alphbetic' tegn?
// ligesom man kan definere tegnklasser i grep ned diverse koder (\n)
global $special;
// routine til at hŒndtere eventuelle kommaer, punktum og lign i slutningen af et ord
// hvos et ord slutter med et af disse tegn, skal dette tegn sk¾res fra, f¿r ordet manipuleres.
//Efterf¿lgende skal det s¾ttes pŒ igen.
switch (substr($t,-1)) {
case ",":
$special = substr($t,-1);
break;
case ".":
$special = substr($t,-1);
break;
case ";":
$special = substr($t,-1);
break;
case "?":
$special = substr($t,-1);
break;
case "!":
$special = substr($t,-1);
break;
default:
$special = FALSE;
}
// hvis der er et , . ; ? eller ! eller lign, sŒ klip det af.
if($special){$t=substr($t,0,strlen($t)-1);}
// t¾l antallet af bogstaver i det aktuelle ord, efter eventuelle kommategn er fjernet
// dette tal benyttes til at konstruere en l¿kke, der kan opbygge et array med ordets bogstaver
$antal_tegn = strlen($t);
// opret et array der rummer hvert bogstav i ordet
// jeg konverterer ordet til et array for lettere at kunne manipulere med
// de enkelte elementer (bogtaver) i ordet
// her benytter jeg $j i stedet for $i i min l¿kke, for ikke at komme i problemer
// med den hovedl¿kke, som denne lykke er indlejret i.. men er det n¿dvendigt?
// her stŒr l¿kken jo i sin egen funktion og er ikke en global..
for ($j = 0; $j < $antal_tegn; $j++) {
$tmp_orginal[] = substr($t,$j,1);
}
// nu har l¿kken lavet et array $temp-original["ord1","ord2","ord3"]
// herefter laver jeg en kopi af dette array, sŒ jeg kan manipulere med det,
//uden at miste min original, jeg skal bruge den senere..
$tmp = $tmp_orginal;
// nu fjerner jeg f¿rste og sidste element (bogstav) i mit array
// det f¿rste
unset($tmp[0]);
// reindekserer mit array
$tmp = array_values($tmp);
// fjerner det sidste
unset($tmp[count($tmp)-1]);
// jeg unders¿ger om mit ord overhovedet er langt nok til,
// at en rokade af de midterste bokstaver vil have en effekt..
// hvis ikke skipper jeg rokaden.
// dette tjek burde nok stŒ tidligere, sŒ jeg kunne spare noget mere kode,
// som i sŒ fald ogsŒ er overfl¿dig..
if($antal_tegn > 3){
// seeing (men kan man seede shuffle() med srand() ??)
srand((float)microtime()*1000000);
// shuffler et par gange
// (to gange har tendens til, at skabe ord der ikke er helt sŒ langt fra originalen)
// eller er det mig der bilder mig noget ind?
shuffle($tmp);shuffle($tmp);
}
// nu er $tmp (som er det midterste af mit ord9 blevet blandet rundt et par gange..
// .. og de f¿rste og sidste ord skal puttes pŒ igen
$tmp2 = array_merge($tmp_orginal[0],$tmp,$tmp_orginal[$antal_tegn-1]);
// herefter returnere funktionen resultatet i form af et array,
// hvor alle bogstaver pŒ n¾r det f¿rste og det sidste er blevet blandet
return $tmp2;
}
?>