Das kann man u.a. bei multiple choice Fragebögen verwenden. Wenn z.B. als letztes Element immer "Sonstiges" stehen soll.
<?php
/**
Array- shuffeln und dabei einzelne Elemente fixieren
*/
$test = array ('Affe','Bär*','Camel', 'Dachs', 'Elefant',
'Fuchs', 'Gorilla','Hase' ,'Igel*','Jaguar','Katze*','Sonstiges*');
// Diese Elemente sollen fixiert werden
$fixed = array(1,8,10,11);
function display_array($arr)
{
$result = join(', ',$arr);
echo $result.'<br>';
}
function my_shuffle($arr,$f)
{
$new = array();
$stack = array();
for ($n=0; $n < count($arr); $n++){
if (in_array($n, $f)) {
$new[$n] = $arr[$n];
} else {
$stack[] = $arr[$n];
}
}
shuffle($stack);
for ($n=0;$n < count($arr); $n++){
if (isset ($new[$n])) {
continue;
} else {
$new[$n] = array_pop($stack);
}
}
ksort($new);
return $new;
}
display_array($test);
$test = my_shuffle($test, $fixed);
display_array($test);
print '<span style="font-size:x-small;">Elemente mit <strong>*</strong> sollen ihre Position beibehalten.</span>';
?>