Avatar billede exp Juniormester
22. september 2003 - 09:08 Der er 13 kommentarer og
2 løsninger

mix bogstaver i tekststreng

Jeg kunne godt lige tænke mig en funktion, der tager bogstaverne fra en given tekststreng og blander dem tilfældigt.

Pseudo-kode:

<?php
$tekst = "blandes";

$echo_tekst = funktion($tekst);

echo $echo_tekst;
?>

udskriver fx

lnebadr
Avatar billede basicq Nybegynder
22. september 2003 - 09:33 #1
Prøv se om det her virker.

$tekst = "blandes";
for($i=0;$i<strlen($tekst);$i++) {
    $array[]=$tekst[$i];
}
shuffle($array);
for($i=0;$i<count($array);$i++) {
    $ran_tekst .= $array[$i];
}
echo $ran_tekst;
Avatar billede basicq Nybegynder
22. september 2003 - 09:39 #2
Sorry her er den som function.

$tekst = "blandes";
function mix_tekst($tekst) {
for($i=0;$i<strlen($tekst);$i++) {
    $array[]=$tekst[$i];
}
shuffle($array);
for($i=0;$i<count($array);$i++) {
    $ran_tekst .= $array[$i];
}
return $ran_tekst;
}
echo mix_tekst($tekst);
Avatar billede jakoba Nybegynder
22. september 2003 - 10:01 #3
php's shuffle funktion er ret sølle (se kommentarerne forneden) http://dk.php.net/manual/en/function.shuffle.php

Så jeg vil anbefale du laver din egen "bland et array" funktion

function swapshuffle($ditarray) {  // nb; kun til numerisk indexerede arrays
    srand ((double) microtime() * 10000000);
    $maxindex = sizeof($ditarray) -1;
    for ( $i=0; $i<$maxindex; $i++ ) {
        $fra = rand( $i, $maxindex );
        $temp = $ditarray[$i];
        $ditarray[$i] = $ditarray[$fra];
        $ditarray[$fra] = $temp;
    } 
    return $array;
} // end swapshuffle

mvh JakobA
Avatar billede exp Juniormester
22. september 2003 - 10:05 #4
Nu siger du numerisk indexerede arrays... er det så lig med tal?
Avatar billede jakoba Nybegynder
22. september 2003 - 10:16 #5
Yep. til forskel fra den anden type arrays der indekseres med en streng:
$numeriskarray[25] = "celle 25";    // numerisk array
$associativtarray["olsen"] = 25;    // associativt array
Avatar billede mikl-dk Nybegynder
22. september 2003 - 10:30 #6
Hvad med:

function shufflestrin($str)
{
  $noChars = strlen($str);

  $tmpRdmArr;
  $returnStr;

  for($i = 0; $i <= $noChars; $i++)
  {
    $tmpRdmArr[] = substr($str, $i, 1);
  }

  srand ((double) microtime() * 10000000);
  $maxindex = sizeof($tmpRdmArr) - 1;

  for($i = 0; $i < $maxindex; $i++)
  {
    $fra = rand( $i, $maxindex );
    $temp = $tmpRdmArr[$i];
    $$tmpRdmArr[$i] = $tmpRdmArr[$fra];
    $tmpRdmArr[$fra] = $temp;
  }

  for($i = 0; $i <= count($tmpRdmArr) - 1; $i++)
  {
    $returnStr .= $tmpRdmArr[$i];
  }
}

return $returnStr;
}

IKKE TESTET!

Med lidt lånt af de forskelliges indlæg, er det her bixet sammen til en funktion..
Avatar billede basicq Nybegynder
22. september 2003 - 11:26 #7
Hvorfor er shuffle funktion sølle?
Avatar billede exp Juniormester
22. september 2003 - 11:37 #8
Jeg sidder og leger lidt med det basicq har foreslået... men jeg har et problem når tekst-strengen er tom (for dan kan den nemlig godt være!)

Det er ikke noget der skal bruges til at generere komplekse passwords, det er bare en lille sjov ting til et læseforsøg jeg laver. Derfor vil jeg ikke bruge mere serverkraft en højst nødvendigt.

Men den melder følgende fejl når strengen er tom:

Warning: shuffle() expects parameter 1 to be array, null given in /home/web/kjeldsen/firewerx.dk/tekstgenerator.php on line 16

Hvad skal jeg gøre?

Har prøvet at komme udenom det med en
if($temptekst = null) {
    exit;
}

men det virker ikke...
Avatar billede exp Juniormester
22. september 2003 - 11:38 #9
for dan = for det
Avatar billede mikl-dk Nybegynder
22. september 2003 - 11:42 #10
du skal have 2 stk =...

Prøv:
if(strlen($temptekst) == 0) {
    exit;
}

eller dit eget, der er rettet:
if($temptekst == null) {
    exit;
}
Avatar billede exp Juniormester
30. september 2003 - 20:10 #11
basicq >>
Det blev dit jeg brugte, smid et svar...
Avatar billede exp Juniormester
12. oktober 2003 - 09:59 #12
mikl-dk >>
Du får lidt for:
if(strlen($temptekst) == 0) {
    exit;
}

eller dit eget, der er rettet:
if($temptekst == null) {
    exit;
}

basicq >>
Sig til hvis du vil have dine point :-)
Avatar billede mikl-dk Nybegynder
12. oktober 2003 - 14:28 #13
Takker :)

Sad og legede med det den anden dag...

Se dette eksempel:
http://www.hm-group.dk/ord.php?str=Eksperten har svaret på en masse spørgsmål

Koden er (jeg undskylder slamkoden, men det virker):
=====================================================
<?php
function messWordUp($str)
{
    $newWord    = substr($str, 1, strlen($str) - 2);
    $wordArr;
    $wordStr;
   
    for($i = 0; $i <= strlen($newWord) - 1; $i++)
    {
        $wordArr[] = substr($newWord, $i, 1);
    }
   
    shuffle($wordArr);
   
    for($i = 0; $i <= count($wordArr) - 1; $i++)
    {
        $wordStr .= $wordArr[$i];
    }
   
    return substr($str, 0, 1) . $wordStr . substr($str, strlen($str) - 1, 1);
}

$str    = htmlentities($_GET["str"]);

$strArr    = explode(" ", $str);

for($i = 0; $i <= count($strArr) - 1; $i++)
{
    $strArr[$i]    = str_replace(" ", "", $strArr[$i]);
   
    if (strlen($strArr[$i]) > 3)
        $strArr[$i]    = messWordUp($strArr[$i]);
   
    echo $strArr[$i] . " ";
}

echo "<br><br>Lavet af denne tekst:<br>$str";
?>
Avatar billede mikl-dk Nybegynder
12. oktober 2003 - 14:32 #14
Har dog ikke taget hensyn til specialtegn i query-linien, men det kan jo blot bygges ind:
http://dk2.php.net/urldecode
Avatar billede exp Juniormester
12. oktober 2003 - 16:23 #15
Kan kun få den til at virke ved at fjerne htmlentities:

<?php
    function messWordUp($str) {
        $newWord    = substr($str, 1, strlen($str) - 2);
        $wordArr;
        $wordStr;
       
        for($i = 0; $i <= strlen($newWord) - 1; $i++) {
            $wordArr[] = substr($newWord, $i, 1);
        }
       
        shuffle($wordArr);
       
        for($i = 0; $i <= count($wordArr) - 1; $i++) {
            $wordStr .= $wordArr[$i];
        }
       
        return substr($str, 0, 1) . $wordStr . substr($str, strlen($str) - 1, 1);
    }
   
    $str = $_GET['str'];
   
    $strArr = explode(" ", $str);
   
    for($i = 0; $i <= count($strArr) - 1; $i++) {
        $strArr[$i]    = str_replace(" ", "", $strArr[$i]);
       
        if (strlen($strArr[$i]) > 3)
            $strArr[$i]    = messWordUp($strArr[$i]);
           
            echo $strArr[$i] . " ";
       
    }
   
    echo "<br><br>Lavet af denne tekst:<br>".$str;
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester