Last active
April 30, 2018 21:20
-
-
Save Vamoss/60d647f2f3ede6e1d449f5e0f265f256 to your computer and use it in GitHub Desktop.
Sort PHP Array in way that a list is consumed and never repeats a sequence
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$mylist = array("item 1", "item 2", "item 3", "item 4", "item 5"); | |
function clone_array_sorted($list) { | |
$keys = array_keys($list); | |
shuffle($keys); | |
$random = array(); | |
foreach ($keys as $key){ | |
$random[] = $list[$key]; | |
} | |
return $random; | |
} | |
function sort_list($firstItemCannotBe = 0){ | |
global $mylist; | |
//uma lista precisa ter ao menos 2 itens nela | |
if(count($mylist)<2){ | |
throw new Exception('Lista contém apenas 1 item, não é possível aleatorizar.'); | |
} | |
//não deixa o primeiro item da lista aleatorizada ser igual ao item da ultima lista | |
//assim nunca repete uma sequencia | |
$_SESSION['randomlist'] = clone_array_sorted($mylist); | |
while ($_SESSION['randomlist'][0] == $mylist[$firstItemCannotBe]) { | |
$_SESSION['randomlist'] = clone_array_sorted($mylist); | |
} | |
} | |
//para o caso de erro, chame a url ?reset | |
if(isset($_GET['reset'])){ | |
session_start(); | |
session_destroy(); | |
unset($_SESSION); | |
} | |
//inicializa as variaveis de sessão | |
session_start(); | |
if(!isset($_SESSION['randomlist'])) { | |
sort_list(); | |
} | |
//retira o primeiro item da lista | |
$currentItem = array_shift($_SESSION['randomlist']); | |
//verifica se foi o ultimo item da lista | |
//portanto precisa fazer uma nova | |
if(count($_SESSION['randomlist'])==0){ | |
//neste caso onde $currentItem é apenas uma string, esse codigo funciona | |
//verificar se para o caso de uma array de itens mais complexos continua funcionando | |
$index = array_search($currentItem, $mylist); | |
sort_list($index); | |
} | |
?> | |
<h1>Seu item atual é: <?php echo $currentItem ?>.</h1> | |
Sua lista atual está assim: | |
<pre> | |
<?php var_dump($_SESSION['randomlist']);?> | |
</pre> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment