Hàm random mảng trong php

Đôi lúc chúng ta lập trình cần đến những con số sinh ngẫu nhiên vào những công việc khách nhau hôm này mình xin giới thiệu với mọi người hàm sinh số ngẫu nhiên trong PHP

Mục lục

    Hàm rand[]

    Hàm này sinh ra một số int ngẫu nhiên

    Hàm rand[int1, int2]

    Hàm này sinh ra một số ngẫu nhiên trong khoảng từ số int1 đến int2

    Ví dụ:

    Hàm ngẫu nhiển trong mảng PHP - array_rand[$array, int]

    Hàm sẽ lấy ra số phần tử ngẫu nhiên trong mang, có 2 tham số $array là mảng cần lấy phần tử ngẫu nhiên và int là số phần tử cần lấy

    hàm trả về index key ngẫu nhiên

    ví dụ:


    • Trang chủ
    • PHP / MySQL
    • Lấy ngẫu nhiêu [random] 1 giá trị trong mảng bằng PHP

    Chủ đề: PHP / MySQLBài trước|Bài tiếp

    Trả lời: sử dụng array_rand[]

    Ví dụ cho mảng sau:

    Ví dụ


    Bây giờ để có được một giá trị ngẫu nhiên của mảng. Một cách đơn giản là sử dụng hàm array_rand[]. array_rand[] là một tham số và trả về giá trị chỉ mục ngẫu nhiên dưới dạng số nguyên mà sau đó có thể được sử dụng để lấy giá trị mảng.

    Ví dụ

    Bạn có thể sử dụng hàm array_rand[] để có nhiều hơn một chỉ mục ngẫu nhiên. Chỉ cần truyền một giá trị số nguyên làm tham số thứ hai cho hàm. Bây giờ nó sẽ trả về một loạt các chỉ mục.

    Ví dụ

    Hãy chắc chắn số lượng chọn nhỏ hơn số phần tử mảng làm tham số thứ hai hoặc nếu không PHP sẽ cung cấp cho bạn lỗi E_WARNING

    Câu hỏi liên quan

    Dưới đây là một số câu hỏi thường gặp khác liên quan đến chủ đề này:

    Hai hàm này có chức năng như nhau, dùng để tạo các số ngẫu nhiên. Điểm khác biệt duy nhất là hàm mt_rand[] nhanh hơn 4 lần so với hàm rand[]. Và không gian ngẫu nhiên của nó cũng rộng hơn.

    Cú pháp:

    • rand[]: sẽ cho ra một số nguyên ngẫu nhiên, giá trị lớn nhất có thể là 32767 [còn gọi là  getrandmax];
    • mt_rand[]: sẽ cho ra số nguyên ngẫu nhiên, giá trị lớn nhất có thể là 2147483647 [còn gọi là mt_getrandmax];
    • rand[min, max]: min, max là tùy chọn. Kết quả sẽ cho ra số ngẫu nhiên trong khoảng min max [có thể dùng số âm].
    • mt_rand[min, max]: min, max là tùy chọn. Kết quả cho ra số ngẫu nhiên nguyên trong khoảng min, max [có thể dùng số âm].

    Ví dụ:

    Đây là kết quả ngẫu nhiên của tôi:

    23840
    1751926519
    72
    41

    Trong trường hợp ta cần phải chọn lựa dữ liệu ngẫu nhiên từ các bảng trong database, ví dụ như chọn một số bài viết ngẫu nhiên từ trang blog hoặc chọn ngẫu nhiên một số sản phẩm và hiển thị chúng trên các sidebar, chọn lựa hình ảnh ngẫu nhiên từ gallery, ...

    MySQL không có bất kỳ một câu lệnh nào giúp ta lấy dữ liệu ngẫu nhiên, nhưng chúng ta sẽ tận dụng hàm RAND[]. Đoạn mã sau sẽ giúp các bạn lấy ngẫu nhiên 1 bản ghi từ bảng sanpham.

    SELECT * FROM sanpham ORDER BY RAND[] LIMIT 1;

    Trong đoạn truy vấn bên trên, ORDER BY sẽ sắp xếp kết quả theo thứ tự ngẫu nhiên, và LIMIT 1 sẽ chỉ lấy 1 bản ghi.

    Nếu muốn lấy N bản ghi [N là một số nguyên dương] thì ta làm như sau:

    SELECT * FROM tên_bảng ORDER BY RAND[]  LIMIT N

    Vi dụ như nếu muốn lấy 5 sản phẩm ngẫu nhiên, chúng ta viết câu truy vấn như sau:

    SELECT productName FROM sanpham ORDER BY RAND[] LIMIT 5;

    Lưu ý: kỹ thuật này chỉ thích hợp cho những bảng có ít dữ liệu, nếu không thì nó sẽ tốn nhiều thời gian cho việc lấy ngẫu nhiên, do đó kết quả trả về sẽ chậm.

    Trong trường hợp bảng nào có cột ID với giá trị trải dài từ 1 đến N lần thi chúng ta có thể sử dụng kỹ thuật như sau:

    - Đầu tiên, chúng ta sẽ chọn ngẫu nhiên số lượng trong khoảng từ 1 đến N

    - Kế tiếp, chúng ta sẽ lấy dữ liệu ngẫu nhiên dựa trên số lượng ngẫu nhiên này.

    Để dễ hiểu, ta xét đoạn truy vấn sql sau:

    SET @ID = FLOOR[RAND[ ]* N] + 1;

    SELECT *  FROM table WHERE ID >= @ID LIMIT 1

    Kỹ thuật này sẽ trả về kết quả nhanh hơn bởi vì:

    - Nó sử dụng cột ID để đánh dấu chỉ mục.

    - MySQL không cần phải sắp xếp lại toàn bộ table.

    Bài Viết Liên Quan

    Chủ Đề