Произволна дума

mitko876

Registered
Някои ако може да ми даде скрипт който ми дава произволна дума но ако може поне по 5 думи да минават преди да се повтарят но да не е ротация
Мерси предвартително
 
ами така може да ти изкара примерно 1 дума произволно:
<?php
$lq = array('duma1','duma2','duma3');
echo $lq[array_rand($lq)];
?>

как така 5 думи , без ротация :shock:
 
Въпросът ти изглежда лесен, но всъщност не е, защото ако кажеш на машината случайно, тя ще се справи, но ти искаш хем да е случайно, хем "не съвсем", което налага случайността да е "определяема"... И това "не съвсем" трябва да бъде кратко и най-вече ясно като алгоритъм... Тук е сложното...

Първото, което ми хрумва е с пет масива всеки от тях на принципа, който предлага Бафиту с различни думи и да ги редуваш, но едва ли ще е практично.
Ако думите са много, може да се измисли нещо с началната позиция за четене: чрез ранд() да се ибира от възможна позиция за четене, а позициите да са на достатъчно разстояние една от друга...

Обясни по-точно, закакво ще го ползваш и колко общо ще са думите (и откъде ще ги вземаш), мисля че мога да спретна нещо използваемо...
 
Правя го с цел игра - Бесеница но ми се струва че ако примерно два поредни пъти се падне една и съща дума ще е тъпо но аке е чак толкова сложно може и само да е произволна
 
виж какво спретнах набързо:

<?php
session_start();
$lq = array('duma1','duma2','duma3','duma4','duma5','duma6','duma7','duma8','duma9');
if($_SESSION['duma'] != ''){
if(in_array($_SESSION['duma'],$lq)){
$unset = array_search($_SESSION['duma'],$lq);
unset($lq[$unset]);
}
}
$br = array_rand($lq);
$z = $lq[$br];
$_SESSION['duma'] = $z;
echo $z;
?>

Накратко имаш начален масив $lq в който са ти думите.
пропускам ифовете по надолу ще се върна.
$br съдържа произволно избран индекс от масива.
$z ще съдържа думата която отговаря на този индекс.
Слагаме думата в сесия и после принтваме думата.
Сега ифовете:
отначало проверяваме дали има сесия, 2рия иф проверява дали избраната дума я има в първоначалния масив , след това $unset съдържа индекса който съответства на тази дума и с unset я премахваме от масива за да няма вероятност да се падне последователно.
И вече масива е същия само , че без тази дума което е била предният път т.е. точно това което ти е целта :)
Надявам се ще се оправиш с началният масив (ако го взимаш от някъде)
п.п. ако думите ти са във файл (всяка дума на нов ред) използвай функцията file() тя връща масив т.е. тооочно това което ти трябва :)
хух...
 
мерси много а как мога да разруша сесията и още един въпрос
след като приклуча с една дума тя завинаги ли няма да се показва или за определено време
 

Back
Горе