2016-11-22 2 views
0

У меня есть этот массивСделать случайным для массива с тем же значением

Array 
(
[19] => Array 
    (
     [nState] => -1 
     [bActive] => 1 
    ) 

[20] => Array 
    (
     [nState] => -1 
     [bActive] => 1 
    ) 

[21] => Array 
    (
     [nState] => -1 
     [bActive] => 
    ) 

Я хочу сделать случайный для этого массива, но всегда получают одни и те же значения. Например, я хочу получить всегда массив с ключами 12 11 13 10. Я искал в Интернете, но всегда значения разные. Не могли бы вы мне помочь ? Thx заранее и извините за мой английский

+0

Что означает в точности 'always'? Единственный способ сделать это - создать случайное число, затем сохранить его где-нибудь (база данных или сеанс в зависимости от потребностей) и использовать его позже ... – Aerendir

+1

, который не похож на массив ... больше похоже на json object. можете ли вы привести пример того, что вы пробовали, пожалуйста? –

+0

@mistermartin сделано –

ответ

0

Вы можете использовать этот вариант shuffle:

function shuffled_seed($arr, $seed) { 
    $len = count($arr); 
    $shuffled = []; 
    while ($len) { 
     $shuffled[] = array_splice($arr, $seed % $len, 1)[0]; 
     $seed = floor($seed/$len); 
     $len--; 
    } 
    return $shuffled; 
} 

Если вы предоставите в два раза те же аргументы, вы получите вдвое больше возвращаемого значения. Второй аргумент - это семя. Вы могли бы, например, сгенерировать это как случайное число в первый раз, но затем вспомнить его в следующий раз, когда вам нужно воспроизвести тот же массив.

Пример вызова:

$arr = [1,2,3,4,5,6,7,8,9]; 
$seed = rand(); 
$result = shuffled_seed($arr, $seed); 
print_r($result); 

$result = shuffled_seed($arr, $seed); // same seed 
print_r($result); // same result 
+0

Почему вы строите свой собственный тасол, вместо того, чтобы использовать встроенный, который использует 'srand()' в качестве семени? кажется, что 'srand ($ seed); shuffle ($ arr); 'будет так же эффективно. –

+1

Причина, по которой я не ссылался на * srand *, заключается в том, что она не будет работать так, как ожидалось, на установках PHP, на которых установлен патч Suhosin. Использование * srand * также сложно, поскольку оно ведет себя непредсказуемо, когда вызывается более одного раза в одном сеансе. См. Раздел комментариев по ['srand'] (http://php.net/manual/en/function.srand.php). – trincot

Смежные вопросы