Arraywerte zufällig anordnen

Einzelne Elemente sollen dabei ihre Position beibehalten

Beispiel ausführen

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>';
?>

Benutzte Funktionen


Hinweise zum DatenschutzImpressum © 2005-2008 S. Eickhoff