2009-10-29 36 views

Trả lời

161

Bạn cũng có thể làm chỉ là:

$k = array_rand($array); 
$v = $array[$k]; 

này là cách để làm điều đó khi bạn có một mảng kết hợp.

+9

theo [nhận xét] này (http://www.php.net/manual/en/function.array-rand.php#105265) 'mảng_rand' không phải là ngẫu nhiên vì nó phải là –

+0

Hoặc bạn có thể yêu cầu [điều này gói] (https://github.com/freekmurze/array-functions) và sử dụng 'array_rand_value' – murze

+2

Kể từ PHP 7.1, [' array_rand() '] (http://php.net/manual/en/function.array -rand.php) sử dụng trình tạo Misterenne Twister: [rand() được gán cho mt_rand() và srand() được gán cho mt_srand()] (http://php.net/manual/en/migration71.incompatible.php#migration71 .incompatible.rand-srand-aliases). Trong thực tế nó bây giờ là đủ tốt. –

16

Bạn có thể sử dụng mt_rand()

$random = $ran[mt_rand(0, count($ran) - 1)]; 

Điều này có ích như một chức năng cũng như nếu bạn cần giá trị

function random_value($array, $default=null) 
{ 
    $k = mt_rand(0, count($array) - 1); 
    return isset($array[$k])? $array[$k]: $default; 
} 
+4

Nên là mt_rand (0, 3) vì chỉ có 4 mục. Mặc dù chính xác hơn: $ array [mt_rand (0, count ($ array)] –

+2

Err, tôi nghĩ bạn có nghĩa là mt_rand (0, count ($ ran) - 1) –

+0

Có, tôi đã bắt được. P –

3
$rand = rand(1,4); 

hoặc, đối với mảng cụ thể:

$array = array('a value', 'another value', 'just some value', 'not some value'); 
$rand = $array[ rand(0, count($array)-1) ]; 
+2

Bạn sẽ không bao giờ nhận được mục đầu tiên trong danh sách này và bạn sẽ đi ra ngoài mảng 4 –

+0

Giá trị $ rand đầu tiên là về các giá trị. Mảng gốc có giá trị từ 1 đến 4. RAND thứ hai là các khóa mảng, 0 đến 3. –

-5

Bạn nhận được một n ngẫu nhiên màu nâu đen ra khỏi một mảng như sau:

$randomValue = array_rand($rand,1); 
+3

array_rand() trả về một khóa ngẫu nhiên, không phải là một giá trị ngẫu nhiên. –

19

PHP cung cấp một chức năng chỉ cho rằng: array_rand()
http://php.net/manual/en/function.array-rand.php

$ran = array(1,2,3,4); 
$randomElement = $ran[array_rand($ran, 1)]; 
+0

Giá trị mặc định của đối số thứ hai của hàm 'array_rand' là' 1' vì vậy không cần phải viết nó. –

7

Bạn có thể sử dụng hàm array_rand để chọn một khóa ngẫu nhiên từ mảng của bạn như dưới đây.

$array = array("one", "two", "three", "four", "five", "six"); 
echo $array[array_rand($array, 1)]; 

hoặc bạn có thể sử dụng rand và đếm các chức năng để chọn một chỉ số ngẫu nhiên.

$array = array("one", "two", "three", "four", "five", "six"); 
echo $array[rand(0, count($array) - 1)]; 
6

Chức năng array_rand dường như có phân phối không đồng đều trên mảng lớn, không phải mọi mục mảng đều có khả năng được chọn. Sử dụng shuffle trên mảng và sau đó dùng các yếu tố đầu tiên không có vấn đề này:

$myArray = array(1, 2, 3, 4, 5); 

// Random shuffle 
shuffle($myArray); 

// First element is random now 
$randomValue = $myArray[0]; 
12
$value = $array[array_rand($array)]; 
0

Tôi dựa câu trả lời của tôi tắt của chức năng @ ÓlafurWaage của. Tôi đã cố gắng sử dụng nó nhưng đã chạy vào các vấn đề tham chiếu khi tôi đã cố gắng sửa đổi đối tượng trả về. Tôi cập nhật chức năng của mình để vượt qua và trở lại bằng cách tham khảo.Các chức năng mới là:

function &random_value(&$array, $default=null) 
{ 
    $k = mt_rand(0, count($array) - 1); 
    if (isset($array[$k])) { 
     return $array[$k]; 
    } else { 
     return $default; 
    } 
} 

Đối với bối cảnh nhiều hơn, xem câu hỏi của tôi về phía Passing/Returning references to object + changing object is not working

4

Xuất phát từ Laravel Collection::random():

function array_random($array, $amount = 1) 
{ 
    $keys = array_rand($array, $amount); 

    if ($amount == 1) { 
     return $array[$keys]; 
    } 

    $results = []; 
    foreach ($keys as $key) { 
     $results[] = $array[$key]; 
    } 

    return $results; 
} 

Cách sử dụng:

$items = ['foo', 'bar', 'baz', 'lorem'=>'ipsum']; 

array_random($items); // 'bar' 
array_random($items, 2); // ['foo', 'ipsum'] 

Một vài lưu ý :

  • $amount phải nhỏ hơn hoặc bằng count($array).
  • array_rand() không xáo trộn các phím (kể từ PHP 5.2.10, xem 48224), vì vậy các mục đã chọn của bạn sẽ luôn theo thứ tự ban đầu. Sử dụng shuffle() sau đó nếu cần.


Tài liệu: array_rand(), shuffle()


chỉnh sửa: Chức năng Laravel đã chú ý phát triển kể từ đó, xem Laravel 5.4 của Arr::random(). Dưới đây là một cái gì đó phức tạp hơn, xuất phát từ chức năng Laravel trưởng thành:

function array_random($array, $number = null) 
{ 
    $requested = ($number === null) ? 1 : $number; 
    $count = count($array); 

    if ($requested > $count) { 
     throw new \RangeException(
      "You requested {$requested} items, but there are only {$count} items available." 
     ); 
    } 

    if ($number === null) { 
     return $array[array_rand($array)]; 
    } 

    if ((int) $number === 0) { 
     return []; 
    } 

    $keys = (array) array_rand($array, $number); 

    $results = []; 
    foreach ($keys as $key) { 
     $results[] = $array[$key]; 
    } 

    return $results; 
} 

Một vài điểm nổi bật:

  • Ném ngoại lệ nếu không có đủ các mục có sẵn
  • array_random($array, 1) trả về một mảng của một mục (#19826)
  • Giá trị hỗ trợ "0" cho số mặt hàng (#20439)
2

Lựa chọn của bạn có bất kỳ tác động bảo mật nào không? Nếu có, hãy sử dụng random_int()array_keys(). (random_bytes() chỉ là PHP 7, nhưng có polyfill for PHP 5).

function random_index(array $source) 
{ 
    $max = count($source) - 1; 
    $r = random_int(0, $max); 
    $k = array_keys($source); 
    return $k[$r]; 
} 

Cách sử dụng:

$array = [ 
    'apple' => 1234, 
    'boy' => 2345, 
    'cat' => 3456, 
    'dog' => 4567, 
    'echo' => 5678, 
    'fortune' => 6789 
]; 
$i = random_index($array); 
var_dump([$i, $array[$i]]); 

Demo: https://3v4l.org/1joB1

-4

Một thay thế với tinh khiết Mysql:

$result = mysql_query("select group_id from menu_groups 
     group by group_id 
     order by rand() 
     limit 1"); 

$rand_group= mysql_fetch_row($result); 
$rand_group_id= $rand_group['group_id']; 
+1

Tôi nghĩ bạn hiểu sai câu hỏi. Anh ta yêu cầu một phần tử ngẫu nhiên từ mảng php, chứ không phải bản ghi cơ sở dữ liệu. – zennin

1

Sử dụng rand() để lấy số ngẫu nhiên để echo khóa ngẫu nhiên. Ví dụ: 0 - 3

$ran = array(1,2,3,4); 
echo $ran[rand(0,3)]; 
Các vấn đề liên quan