Hàm shuffle() trong PHP

Hàm shuffle() trong PHP
Hàm shuffle() trong PHP

Chức năng của Hàm shuffle() trong PHP

Hàm shuffle() trong PHP dùng để xáo trộn ngẫu nhiên các phần tử ở trong mảng và đặt lại khóa (key) cho các phần tử đó.

Cú pháp của Hàm shuffle() trong PHP

shuffle($biến_chuỗi_gốc);

$biến_chuỗi_gốc: Biến của chuỗi gốc.

Ví dụ Hàm shuffle() trong PHP

<h2>Xáo trộn ngẫu nhiên các phần tử trong mảng bình thường và đặt lại khóa (key)</h2>
<?php
$manggoc = array("Lực","Vân","Quỳnh","Dung");
shuffle($manggoc);
print_r($manggoc); // Kết quả ngẫu nhiên: Array ( [0] => Vân [1] => Dung [2] => Lực [3] => Quỳnh )
?>

<h2>Xáo trộn ngẫu nhiên các phần tử trong mảng liên kết và đặt lại khóa (key)</h2>
<?php
$manglkgoc = array("Lực"=>35,"Vân"=>29,"Quỳnh"=>2,"Dung"=>30);
shuffle($manglkgoc);
print_r($manglkgoc); // Kết quả ngẫu nhiên: Array ( [0] => 29 [1] => 2 [2] => 35 [3] => 30 )
?>

Kết quả ngẫu nhiên:

/////Xáo trộn ngẫu nhiên các phần tử trong mảng bình thường và đặt lại khóa (key)
Array ( [0] => Dung [1] => Lực [2] => Quỳnh [3] => Vân )

/////Xáo trộn ngẫu nhiên các phần tử trong mảng liên kết và đặt lại khóa (key)
Array ( [0] => 35 [1] => 30 [2] => 29 [3] => 2 )

Chạy Thử

Những lưu ý khi sử dụng hàm shuffle() trong PHP

Hàm shuffle() phù hợp khi cần sắp xếp ngẫu nhiên các phần tử trong một mảng. Tuy nhiên, để tránh kết quả không đúng với mục đích sử dụng, cần chú ý đến việc hàm này tác động trực tiếp lên mảng và cách PHP xử lý khóa của các phần tử.

Hàm shuffle() có làm thay đổi mảng ban đầu không?

Có. shuffle() sẽ thay đổi trực tiếp thứ tự của mảng được truyền vào, thay vì tạo ra một mảng mới. Vì vậy, nếu cần giữ nguyên dữ liệu ban đầu để sử dụng ở những bước tiếp theo, nên tạo một bản sao trước khi xáo trộn.

<?php
$products = ['Laptop', 'Điện thoại', 'Máy tính bảng'];

$randomProducts = $products;
shuffle($randomProducts);

print_r($products);
print_r($randomProducts);
?>

Trong ví dụ trên, $products vẫn giữ nguyên thứ tự, còn $randomProducts được xáo trộn. Cách này hữu ích khi cùng một danh sách cần phục vụ cho nhiều mục đích khác nhau.

Vì sao khóa của mảng bị thay đổi sau khi shuffle()?

Một điểm cần lưu ý là shuffle() không giữ lại các khóa hiện có. Sau khi xáo trộn, PHP sẽ sắp xếp lại các phần tử và đánh khóa mới từ 0 theo thứ tự hiện tại.

<?php
$users = [
    10 => 'An',
    25 => 'Bình',
    40 => 'Cường'
];

shuffle($users);

print_r($users);
?>

Do đó, không nên dùng shuffle() nếu khóa của mảng có ý nghĩa và cần được bảo toàn, chẳng hạn khóa là mã sản phẩm hoặc ID bản ghi. Trong trường hợp đó, nên lựa chọn cách xáo trộn khác phù hợp với cấu trúc dữ liệu.

Khi nào không nên sử dụng shuffle() để chọn phần tử ngẫu nhiên?

Nếu chỉ cần lấy một hoặc một vài phần tử ngẫu nhiên, việc xáo trộn toàn bộ mảng có thể không cần thiết. Với trường hợp này, có thể cân nhắc các hàm chuyên dụng như array_rand() để chọn khóa ngẫu nhiên mà không phải thay đổi thứ tự của toàn bộ dữ liệu.

Ngoài ra, shuffle() không nên được dùng cho các yêu cầu cần tính ngẫu nhiên có tính bảo mật cao như tạo mã xác thực, token hoặc dữ liệu liên quan đến bảo mật. Những trường hợp này cần sử dụng cơ chế sinh dữ liệu ngẫu nhiên phù hợp với mục đích bảo mật.

Lời kết

Cảm ơn các bạn đã tham khảo bài viết Hàm shuffle() trong PHP.

  • 0 Bình luận
Trần Thị Vân | Content Creator Web Mới
Trần Thị Vân
Trần Thị Vân là Content Creator tại Web Mới, phụ trách nghiên cứu, biên soạn nội dung và chia sẻ kiến thức về website, SEO, lập trình cùng các xu hướng công nghệ
Đánh giá
Chia sẻ nội dung đánh giá của bạn về Hàm shuffle() trong PHP
Email, Điện thoại của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *
Đánh giá của bạn
Tên *
Email
Số điện thoại *
Bình luận, Hỏi đáp
Yêu Cầu Báo Giá
Gửi trang web mẫu cần làm theo, chúng tôi sẽ báo giá đến bạn từ Email (tanlucit09@gmail.com - Bùi Tấn Lực) hoặc Zalo (Lực IT - 0398259259) !