2016-03-02 3 views
-1

У меня возникла проблема с возвратом случайных ключей массива, если указанное количество записей совпадает с количеством элементов в массиве.array_rand, возвращающее то же значение

$rdm = array_rand($similar_product_array, 4); 

всегда будет возвращать значения ключей 0, 1, 2, 3, если в массиве имеется 4 элемента.

, например:

// Items in array 
array (size=4) 
    0 => string 'Batman Heroes Edition Nendoroid' (length=31) 
    1 => string 'Oberyn' (length=6) 
    2 => string 'White Walker' (length=12) 
    3 => string 'Avengers Age of Ultron Hulk' (length=27) 

// "randomly" generated array keys is always 0 , 1, 2, 3 
array (size=4) 
    0 => int 0 
    1 => int 1 
    2 => int 2 
    3 => int 3 

Однако, если у меня есть:

$rdm = array_rand($similar_product_array, 3); 

// Returns randomly as expected 
array (size=3) 
    0 => int 0 
    1 => int 2 
    2 => int 3 

он будет возвращать случайно сгенерированные ключи, как это должно.

Что я могу делать неправильно здесь?

ответ

5

Вы неправильно поняли цель функции array_rand(), она должна давать вам случайные записи из массива, но не в случайном порядке. Это означает, что если вы запрашиваете 4 случайных элемента из массива с 4 элементами, он всегда будет возвращать все элементы (в исходном порядке).

Если вам просто нужно случайным образом изменить порядок элементов массива, используйте shuffle() функцию, например, таким образом:

$array_copy = $array; 
shuffle($array_copy); 
$rdm = array_rand($array_copy, <how_many_you_need>); 
+0

Ааа, я теперь понимаю. Спасибо. Я приму свой ответ, как только это позволит мне. – user3796133

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