Tôi có một mảng gọi $ran = array(1,2,3,4);
Làm thế nào để có được giá trị ngẫu nhiên ra khỏi một mảng
tôi cần để có được một giá trị ngẫu nhiên ra khỏi mảng này và lưu nó trong một biến, làm thế nào tôi có thể làm điều này?
Tôi có một mảng gọi $ran = array(1,2,3,4);
Làm thế nào để có được giá trị ngẫu nhiên ra khỏi một mảng
tôi cần để có được một giá trị ngẫu nhiên ra khỏi mảng này và lưu nó trong một biến, làm thế nào tôi có thể làm điều này?
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.
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;
}
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)] –
Err, tôi nghĩ bạn có nghĩa là mt_rand (0, count ($ ran) - 1) –
Có, tôi đã bắt được. P –
$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) ];
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 –
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. –
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);
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. –
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)];
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ó. –
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)];
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];
$value = $array[array_rand($array)];
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
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:
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()
và 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
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'];
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
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)];
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à –
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
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. –