PHP - DE JAVASCRIPT A PHP

 
Vista:

DE JAVASCRIPT A PHP

Publicado por david (1 intervención) el 25/04/2009 18:51:32
Hola amigos, acabo de descubrir esto del php y ya tengo un auténtico problema que me tiene enganchado. El caso es que estoy intentando hacer una versión en php de un curioso javascript. Se trata de un generador de poemas aleatorio y lo podéis ver en http://thinkzone.wlonk.com/PoemGen/PoemGen.htm
Os dejo aquí el código javascript extraído del html. Con mis escasas nociones de php y algunos manuales intenté hacer algo similar valiéndome de sencillos random, luego descubrí que no era posible de esa forma, además lo suyo sería que el resultado no saliera en una caja de texto sino que quedara integrado en el html y cambiara al recargar la página. ¿Podéis echarme una mano? Mi madre dice que si no salgo a tomar el aire me deja sin Internet! ;D

Un saludo

<script type="text/javascript">

random_count=0;
nsentences=0;
nwords1=0; nwords2=0; nwords3=0; nwords4=0; nwords5=0;
nwords6=0; nwords7=0; nwords8=0; nwords9=0;

function init(form)
{
form.Samples.selectedIndex=1;
generate_input(form, form.Samples.options[form.Samples.selectedIndex].text);
make_poem(form);
}

function generate_input(form, sample_name)
{
form.title1.value = "Concrete Nouns";
form.title2.value = "Abstract Nouns";
form.title3.value = "Transitive Verbs";
form.title4.value = "Intransitive Verbs";
form.title5.value = "Adjectives";
form.title6.value = "Adverbs";
form.title7.value = "";
form.title8.value = "";
form.title9.value = "Interjections";
form.sentences.value =
"THE 5 1 6 3S THE 1."
+" 5, 5 1S 6 3 A 5, 5 1."
+" 2 IS A 5 1."
+" 9, 2!"
+" 1S 4!"
+" THE 1 4S LIKE A 5 1."
+" 1S 4 LIKE 5 1S."
+" WHY DOES THE 1 4?"
+" 4 6 LIKE A 5 1."
+" 2, 2, AND 2."
+" WHERE IS THE 5 1?"
+" ALL 1S 3 5, 5 1S."
+" NEVER 3 A 1."
;
if (sample_name == "Sea") {
form.list1.value = "SEA SHIP SAIL WIND BREEZE WAVE CLOUD MAST CAPTAIN SAILOR SHARK WHALE TUNA SEASHELL PIRATE LAD GIRL GULL REEF SHORE MAINLAND MOON SUN";
form.list2.value = "ADVENTURE COURAGE ENDURANCE DESOLATION DEATH LIFE LOVE FAITH";
form.list3.value = "COMMAND VIEW LEAD PULL LOVE DESIRE FIGHT";
form.list4.value = "TRAVEL SAIL WAVE GROW RISE FALL ENDURE DIE";
form.list5.value = "BIG SMALL OLD COLD WARM SUNNY RAINY MISTY CLEAR STORMY ROUGH LIVELY DEAD";
form.list6.value = "SWIFTLY CALMLY QUIETLY ROUGHLY";
form.list7.value = "";
form.list8.value = "";
form.list9.value = "O OH OOH AH LORD GOD WOW GOLLY GOSH";
} else if (sample_name == "City") {
form.list1.value = "CITY STREET SIDEWALK CORNER DOOR WINDOW CAR TRUCK GUY GIRL JOB FLOWER LIGHT CIGARETTE RAIN SKYSCRAPER JACKHAMMER DRIVER WORKER";
form.list2.value = "ACTION WORK NOISE DESOLATION DEATH LIFE LOVE FAITH ANGER EXHAUSTION";
form.list3.value = "GET GRAB PUSH LOVE DESIRE BUY SELL FIGHT HUSTLE";
form.list4.value = "TALK WALK GOSSIP RUN GO STOP EAT GROW SHRINK SHOP WORK";
form.list5.value = "BIG SMALL OLD FAST COLD HOT DARK DUSTY GRIMY DRY RAINY MISTY NOISY FACELESS DEAD";
form.list6.value = "QUICKLY LOUDLY CALMLY QUIETLY ROUGHLY";
form.list7.value = "";
form.list8.value = "";
form.list9.value = "O OH OOH AH LORD GOD DAMN";
} else {
clear_all(form);
}
form.outtext.value = "";
count_all_lines(form);
}

function clear_all(form)
{
form.Samples.value = "-";
form.title1.value = "";
form.title2.value = "";
form.title3.value = "";
form.title4.value = "";
form.title5.value = "";
form.title6.value = "";
form.list1.value = "";
form.list2.value = "";
form.list3.value = "";
form.list4.value = "";
form.list5.value = "";
form.list6.value = "";
form.list7.value = "";
form.list8.value = "";
form.list9.value = "";
form.sentences.value = "";
form.outtext.value = "";
count_all_lines(form);
}

function count_all_lines(form)
{
nwords1 = count_lines(form.list1);
nwords2 = count_lines(form.list2);
nwords3 = count_lines(form.list3);
nwords4 = count_lines(form.list4);
nwords5 = count_lines(form.list5);
nwords6 = count_lines(form.list6);
nwords7 = count_lines(form.list7);
nwords8 = count_lines(form.list8);
nwords9 = count_lines(form.list9);
nsentences = count_lines(form.sentences);
}

function random(maxnum)
{
r = Math.floor(Math.random() * maxnum) + 1;
if (r > maxnum) r = maxnum;
return r;
}

function count_lines(txt)
{
str = txt.value;
len = str.length;
nword = 1;
for (i = 0; i < len; i++) {
if (str.charAt(i) == " ") {
nword++;
}
}
if (str.charAt(len-1) == " ") nword--;
return nword;
}

function get_line(str, lnum)
{
len = str.length;
iline = 1; ichar = 0; jchar = -1;
for (i = 0; i < len; i++) {
if (str.charAt(i) == " ") {
iline++;
if (iline == lnum) {
ichar = i + 1;
} else if (iline == (lnum + 1)) {
jchar = i - 1;
if (str.charAt(jchar) == " ") {
jchar--;
}
break;
}
}
}
if (jchar < 0) jchar = len - 1;
// Note: substring() doesn't work consistently on all browsers
s = "";
for (i = ichar; i <= jchar; i++) {
s = s + str.charAt(i);
}
return s;
}

function make_poem(form)
{
form.outtext.value = "";
count_all_lines(form);
nlines = random(4) + 1;
for (ilin = 1; ilin <= nlines; ilin++) {
make_poem_line(form)
}
}

function make_poem_line(form)
{
pattern = get_line(form.sentences.value, random(nsentences));
lenpat = pattern.length;
for (ichr = 0; ichr < lenpat; ichr++) {
chr = pattern.charAt(ichr);
// If the pattern contains a digit n, then pick a random word from list n
if ((chr >= '1') && (chr <= '9')) {
if (chr == '1') {
wrd = get_line(form.list1.value, random(nwords1));
} else if (chr == '2') {
wrd = get_line(form.list2.value, random(nwords2));
} else if (chr == '3') {
wrd = get_line(form.list3.value, random(nwords3));
} else if (chr == '4') {
wrd = get_line(form.list4.value, random(nwords4));
} else if (chr == '5') {
wrd = get_line(form.list5.value, random(nwords5));
} else if (chr == '6') {
wrd = get_line(form.list6.value, random(nwords6));
} else if (chr == '7') {
wrd = get_line(form.list7.value, random(nwords7));
} else if (chr == '8') {
wrd = get_line(form.list8.value, random(nwords8));
} else if (chr == '9') {
wrd = get_line(form.list9.value, random(nwords9));
} else {
wrd = '';
}
form.outtext.value = form.outtext.value + wrd;
} else {
form.outtext.value = form.outtext.value + chr;
}
}
form.outtext.value = form.outtext.value + " ";
}</script>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DE JAVASCRIPT A PHP

Publicado por pedro (1 intervención) el 25/04/2009 19:59:47
UY! TIENE BUENA PINTA EL SCRIPT
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DE JAVASCRIPT A PHP

Publicado por david (1 intervención) el 26/04/2009 18:16:30
Intentaré explicarme con otro planteamiento;
Yo tengo dentro de un código javascript una cadena de palabras como ésta.

form.list1.value = "SEA SHIP SAIL WIND BREEZE WAVE CLOUD MAST CAPTAIN SAILOR SHARK WHALE TUNA SEASHELL PIRATE LAD GIRL GULL REEF SHORE MAINLAND MOON SUN";
en ese código usan la cadena para obtener un random de palabras dentro de otra lista de frases donde incluyen el número correspondiente de cada cadena, en éste caso 1.

Ejemplo:

form.sentences.value =
"THE 5 1 6 3S THE 1."
+" 5, 5 1S 6 3 A 5, 5 1."
+" 2 IS A 5 1."
+" 9, 2!"
+" 1S 4!"
+" THE 1 4S LIKE A 5 1."
+" 1S 4 LIKE 5 1S."
+" WHY DOES THE 1 4?"
+" 4 6 LIKE A 5 1."
+" 2, 2, AND 2."
+" WHERE IS THE 5 1?"
+" ALL 1S 1 1, 1 1S." -------> Aquí por ejemplo no se repite ninguna palabra.
+" NEVER 3 A 1."
;
-Donde haya un 1 aparecería una de las palabras separadas por de la primera lista (nótese que en +" ALL 1S 1 1, 1 1S." no se repite ningúna aún siendo todas 1)-

¿Cómo podría hacer yo algo similar en PHP? es decir, una cadena de palabras separadas para obtener un random y que no se repita ninguna de ellas en unas frases aleatorias.

Recientemente he encontrado este script PHP:

<?php

function rand_string($len, $chars = 'qwertyuiopasdfghjklzxcvbnm1234567890')
{
$string = '';
for ($i = 0; $i < $len; $i++)
{
$pos = rand(0, strlen($chars)-1);
$string .= $chars{$pos};
}
return $string;
}

echo 'String al Azar de 3 Caracteres : '.rand_string(3) . '<br>' ;
echo 'String al Azar de 6 Caracteres : '.rand_string(6) . '<br>' ;
echo 'String al Azar de 9 Caracteres : '.rand_string(9) . '<br>' ;

?>

Pero claro, no me sirve pues necesito que la cadena de caracteres sea en realidad una cadena de palabras.

¿podríais darme alguna pista, algo que me oriente un poco? Mis nociones de PHP son muy escasas pues acabo de empezar a conocerlo hace poco.
Gracias por vuestra ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar