Avatar billede kgp43 Nybegynder
01. januar 2009 - 17:02 Der er 15 kommentarer og
1 løsning

Erstat ord med et andet

Hejsa,

Har et lidt mærkeligt problem, som jeg ikke kan løse.
Hvordan erstatter man et ord med et andet?

I dette format:

Manden cyklede en lang tur  =
[Manden|Konen|Drengen] [cyklede|kørte] [en lang|en kort] tur

Så den vælger et tilfældigt ord indenfor [x]
Avatar billede kgp43 Nybegynder
01. januar 2009 - 17:04 #1
Ved ikke om det gav mening, men:

Den ændre teksten, så det bliver lidt tilfældigt:

Feks.

Konen cyklede en kort tur
Mangen cyklede en lang tur
Drengen kørte en kort tur
etc
Avatar billede mstorgaard Praktikant
01. januar 2009 - 17:16 #2
<?php
$pre = array('Manden','Konen','Drengen');
$mid = array('cyklede','kørte');
$suf = array('lang','kort');

echo $pre[rand(0,2)].' '.$mid[rand(0,1)].' en '.$suf[rand(0,1)].' tur';
?>

// utestet
Avatar billede kgp43 Nybegynder
01. januar 2009 - 17:21 #3
Det kan jeg ikke bruge, da værdien af "manden, konen, drengen" ikke er konstant, det var bare eksempler.
Avatar billede mstorgaard Praktikant
01. januar 2009 - 17:24 #4
Hvordan definerer du så indholdet af de forskellige dele?
Avatar billede mstorgaard Praktikant
01. januar 2009 - 17:26 #5
Nu er antallet af værdier i array'et ikke vigtigt.

<?php
$pre = array('Manden','Konen','Drengen');
$num_pre = count($pre)-1;
$mid = array('cyklede','kørte');
$num_mid = count($mid)-1;
$suf = array('lang','kort');
$num_suf = count($suf)-1;

echo $pre[rand(0,$num_pre)].' '.$mid[rand(0,$num_mid)].' en '.$suf[rand(0,$num_suf)].' tur';
?>
Avatar billede kgp43 Nybegynder
01. januar 2009 - 17:36 #6
Tror ikke jeg kan bruge den løsning, da "mangen, konen, drengen" er total tilfældig.
En bruger kan vælge nogle tilfældige ord i hans signatur, og lave dem om til noget andet.

Jeg prøver lige noget og vender tilbage.
Avatar billede jakobdo Ekspert
01. januar 2009 - 19:14 #7
Selvom du snakker totalt tilfældigt, så kan de tilfældige valg jo stadig godt puttes ind i et array, og derefter vælges tilfældigt.
Avatar billede kgp43 Nybegynder
01. januar 2009 - 19:17 #8
Dette her virker perfekt.

<?php
//$string = file_get_contents('words.txt');
$string = 'The little [boy|man] took his [cycle|bike|vehicle] for a [ride|spin|drive]';
preg_match_all('~\[([^\]]*)\]~',$string,$matches);
foreach($matches[1] as $m) {
  $choice = explode('|',$m);
  shuffle($choice);
  $rep[] = $choice[0];
}
foreach ($rep as $r) {
  $string = preg_replace('~\[[^\]]*\]~',$r,$string,1);
}
echo $string;
?>
Avatar billede jakobdo Ekspert
01. januar 2009 - 21:34 #9
Så det betyder du selv fandt løsningen ?
Eller søger du stadig en anden løsning ?
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 21:42 #10
Lidt kortere, men samme princip: http://n0p.com/858197.php

<?php
$string = 'The little [boy|man] took his [cycle|bike|vehicle] for a [ride|spin|drive]';
preg_match_all('~\[([^\]]*)\]~',$string,$matches);
print preg_replace_callback(
        '|\[(.*?)\]|',
        create_function('$m','$c = explode("|",$m[1]);shuffle($c);return $c[0];'
        ),
        $string);
?>
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 21:43 #11
Hov, der var en linie for meget:

<?php
$string = 'The little [boy|man] took his [cycle|bike|vehicle] for a [ride|spin|drive]';
print preg_replace_callback(
        '|\[(.*?)\]|',
        create_function('$m','$c = explode("|",$m[1]);shuffle($c);return $c[0];'
        ),
        $string);
?>
Avatar billede erikjacobsen Ekspert
01. januar 2009 - 21:46 #12
Og med lidt mindre arbejde for serveren (ingen grund til at bytte om på alle elementer i et array, bare for at få et tilfældigt):

<?php
$string = 'The little [boy|man] took his [cycle|bike|vehicle] for a [ride|spin|drive]';
print preg_replace_callback(
        '|\[(.*?)\]|',
        create_function('$m','$c = explode("|",$m[1]);return $c[array_rand($c)];'
        ),
        $string);
?>
Avatar billede kgp43 Nybegynder
17. februar 2009 - 15:25 #13
smid et svar, så er der point :)
Avatar billede erikjacobsen Ekspert
17. februar 2009 - 19:19 #14
Jeg samler slet ikke på point, tak.
Avatar billede kgp43 Nybegynder
08. marts 2009 - 14:37 #15
så må jeg nok hellere få den lukket :)
Avatar billede erikjacobsen Ekspert
09. marts 2009 - 20:30 #16
Du må hellere få accepteret dit eget svar.
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