Hướng dẫn dùng php array_multisort trong PHP

Định nghĩa Hàm array_multisort() trong PHP

__Hàm array_multisort() trong PHP__ được sử dụng để sắp xếp nhiều mảng cùng một lúc, hoặc sắp xếp một mảng đa chiều.

Cú pháp Hàm array_multisort() trong PHP

Hàm array_multisort() trong PHP có cú pháp như sau:

array_multisort(array1,sorting order,sorting type,array2...);

Tham số

Tham sốMiêu tả
array1 Bắt buộc. Xác định một mảng
Sort order

Tùy ý. Xác định thứ tự sắp xếp. Các giá trị có thể có:

  • SORT_ASC: Sắp xếp theo thứ tự tăng dần (A-Z)
  • SORT_DESC: Sắp xếp theo thứ tự giảm dần (Z-A)
Sorting type

Tùy ý. Xác định kiểu để so sánh. Các giá trị có thể có là:

  • SORT_REGULAR: Mặc định, so sánh các phần tử một cách thông thường
  • SORT_NUMERIC: So sánh các phần tử về giá trị số
  • SORT_STRING: So sánh các phần tử về giá trị chuỗi
array2 Tùy ý. Xác định một mảng

Trả về giá trị

  • Trả về TRUE nếu thành công, và FALSE nếu thất bại.

Ví dụ minh họa cách sử dụng hàm array_multisort() trong PHP:

<?php
   $array1 = array("10", 100, 100, "a");
   $array2 = array(1, 3, "2", 1);

   array_multisort($array1, $array2);
   print_r($array1);
   print "<br>";
   print_r($array2);
?> 

Lưu chương trình trên trong một file có tên là test.php trong htdocs, sau đó mở trình duyệt và gõ địa chỉ http://localhost:8080/test.php sẽ cho kết quả:

Hướng dẫn dùng php array_multisort trong PHP

Xem thêm Hàm trong php

Nội Dung

  • 1. Hàm array_multisort() trong PHP
  • 2. Cú pháp hàm array_multisort() trong PHP
  • 3. Ví dụ về hàm array_multisort() trong PHP

Hàm array_multisort() trong PHP được xử dụng để sắp xếp các mảng trong PHP. Hàm này có thể sắp xếp một số mảng cùng lúc hay sắp xếp mảng đa chiều theo một hoặc nhiều chiều. Hàm này sẽ trả về một mảng đã được sắp xếp. Với hàm này các key dạng chuỗi sẽ được giữ nguyên còn các key dạng số sẽ được reset lại và bắt đầu lại theo thứ tự tăng dần bắt đầu từ 0.

Ta cũng có thể chỉ định thứ sắp xếp và các tham số kiểu sắp xếp sau mỗi mảng. Nếu như ta không chỉ định thì mỗi tham số mảng sẽ được giá trị mặc định.

2. Cú pháp hàm array_multisort() trong PHP

Ta có cú pháp của hàm array_multisort() trong PHP là:

array_multisort(array1, sortorder, sorttype, array2, array3, ...)

Trong đó:

  • array1 : mảng chỉ định để sắp xếp . Tham số này là bắt buộc
  • sortorder : Tham số này chỉ định thứ tự sử dụng tức là theo thứ tự tăng dần hoặc giảm dần. Giá trị mặc định của tham số này là SORT_ASC. Tức là sắp xếp theo thứ tự tăng dần(A -> Z). Để sắp xếp theo thứ tự giảm dần(Z -> A), chúng ta sẽ phải đặt tham số này thành SORT_DESC.
  • sorttype : tham số này chỉ định tùy chọn sắp xếp cho các mảng
  • array2 , array3 : là những mảng chỉ định sắp xếp khác. Tham số này là không bắt buộc

Ta có một số tham số sortype có thể lựa chọn như sau:

  • SORT_REGULAR (mặc định) : So sánh các phần tử bình thường (Chuẩn ASCII).
  • SORT_NUMERIC : So sánh các phần tử dưới dạng giá trị số.
  • SORT_STRING : So sánh các phần tử dưới dạng giá trị chuỗi.
  • SORT_LOCALE_STRING : So sánh các phần tử dưới dạng chuỗi, dựa trên ngôn ngữ hiện tại(có thể được thay đổi bằng cách sử dụng setlocale ()).
  • SORT_NATURAL : So sánh các phần tử dưới dạng chuỗi bằng cách sử dụng “thứ tự tự nhiên” như natsort()
  • SORT_FLAG_CASE : Có thể được kết hợp (dùng or) với SORT_STRING hoặc SORT_NATURAL để sắp xếp các chuỗi không phân biệt chữ hoa chữ thường.

Nếu chúng ta muốn sắp xếp nhiều mảng, chúng ta có thể chuyển chúng dưới dạng các tham số như $array2, $array3… theo sau là sortorder , sorttype của chúng.

Ví dụ: sắp xếp mảng theo thứ tự tăng dần

<?php
$a=array("PHP","Java","Python","C","HTML");
array_multisort($a);
echo '<pre>';
print_r($a);
?>

Kết quả

Array
(
    [0] => C
    [1] => HTML
    [2] => Java
    [3] => PHP
    [4] => Python
)

Mảng sau khi sử dụng hàm array_multisort() đã được sắp xếp theo thứ tự trong bảng chữ cái. Khá là đơn giản phải không.

3. Ví dụ về hàm array_multisort() trong PHP

Ví dụ 1: sắp xếp hai mảng theo thứ tự tăng dần

<?php
$a1=array("PHP","HTML","C");
$a2=array("Python","Java","HTML");
array_multisort($a1,$a2);

echo '<pre>';
print_r($a1);

echo '<pre>';
print_r($a2);
?>

Kết quả

Array
(
    [0] => C
    [1] => HTML
    [2] => PHP
)
Array
(
    [0] => HTML
    [1] => Java
    [2] => Python
)

Ví dụ 2: sắp xếp với những giá trị giống nhau

<?php
$a1=array("Dog","Dog","Cat");
$a2=array("Pluto","Fido","Missy");
array_multisort($a1,$a2);

echo '<pre>';
print_r($a1);

echo '<pre>';
print_r($a2);
?>

Kết quả

Array
(
    [0] => Cat
    [1] => Dog
    [2] => Dog
)
Array
(
    [0] => Missy
    [1] => Fido
    [2] => Pluto
)

Với những giá trị giống nhau thì chúng vẫn được sắp xếp một cách bình thường và không bị thay đổi hay ghi đè.

Ví dụ 3: sắp xếp mảng sử dụng thêm thông số khác

<?php
$a1=array("PHP","Java","Python");
$a2=array("HTML","C","XML");
array_multisort($a1,SORT_ASC,$a2,SORT_DESC);

echo '<pre>';
print_r($a1);

echo '<pre>';
print_r($a2);
?>

Kết quả

Array
(
    [0] => Java
    [1] => PHP
    [2] => Python
)
Array
(
    [0] => C
    [1] => HTML
    [2] => XML
)

Trong ví dụ này với mảng $a1 thì mình sử dụng them thông số là SORT_ASC tức là vẫn sẽ sắp xếp theo thứ tự tăng dần và đây là giá trị mặc định (A -> Z). Nhưng với mảng $a2 thì mình lại truyền vào thông số là SORT_DESC . Lúc này thứ tự sắp xếp sẽ là giảm dần chứ không phải tăng dần nữa (Z -> A)

Ví dụ 4: Hợp nhất hai mảng và sắp xếp chúng dưới dạng số, theo thứ tự giảm dần:

<?php
$a1=array(1,30,15,7,25);
$a2=array(4,30,20,41,66);
$num=array_merge($a1,$a2);

array_multisort($num,SORT_DESC,SORT_NUMERIC);

echo '<pre>';
print_r($num);
?>

Kết quả

Array
(
    [0] => 66
    [1] => 41
    [2] => 30
    [3] => 30
    [4] => 25
    [5] => 20
    [6] => 15
    [7] => 7
    [8] => 4
    [9] => 1
)

Ở ví dụ này đầu tiên mình đã nối hai mảng lại thành một mảng là $num . Hàm được sử dụng ở đây là hàm array_merge() mà ta đã được tìm hiểu rồi. Sau đó là sử dụng hàm array_multisort() để sắp xếp như bình thường theo yêu cầu bài toán thôi. Ở đây là sắp xếp dạng số theo thứ tự giảm dần vì vậy ta phải truyền thêm vào hai thông số là SORT_DESCSORT_NUMERIC

Ví dụ 5: sắp xếp mảng đa chiều

<?php
$a = array(
       array("10", 11, 100, 100, "a"),
       array(   1,  2, "2",   3,   1)
      );
array_multisort($ar[0], SORT_ASC, SORT_STRING,
                $ar[1], SORT_NUMERIC, SORT_DESC);
echo '<pre>';
var_dump($a);
?>

Kết quả

array(2) {
  [0]=>
  array(5) {
    [0]=>
    string(2) "10"
    [1]=>
    int(11)
    [2]=>
    int(100)
    [3]=>
    int(100)
    [4]=>
    string(1) "a"
  }
  [1]=>
  array(5) {
    [0]=>
    int(1)
    [1]=>
    int(2)
    [2]=>
    string(1) "2"
    [3]=>
    int(3)
    [4]=>
    int(1)
  }
}

Trong ví dụ này, sau khi sắp xếp, mảng đầu tiên sẽ biến đổi thành “10”, 100, 100, 11, “a” (nó được sắp xếp thành chuỗi theo thứ tự tăng dần). Hộp thứ hai sẽ chứa 1, 3, “2”, 2, 1 (được sắp xếp dưới dạng số, theo thứ tự giảm dần).

Ví dụ 6: Sắp xếp mảng không phân biệt chữ hoa chữ thường

<?php
$array = array('Alpha', 'atomic', 'Beta', 'bank');
$array_lowercase = array_map('strtolower', $array); 

array_multisort($array_lowercase, SORT_ASC, SORT_STRING, $array);

echo '<pre>';
print_r($array);
?>

Kết quả

Array
(
    [0] => Alpha
    [1] => atomic
    [2] => bank
    [3] => Beta
)

SORT_STRINGSORT_REGULAR đều phân biệt chữ hoa chữ thường, các chuỗi bắt đầu bằng chữ hoa sẽ đứng trước các chuỗi bắt đầu bằng chữ thường. Mình đã sử dụng hàm array_map() để chuyển đổi hàm $array thành chữ thường. Sau đó tiến hành sắp xếp giá trị mảng đã chuyển đổi thành chữ thường. Mảng ban đầu sẽ từ đây mà sắp xếp các phần tử theo mảng chữ thường.

Để thực hiện sắp xếp không phân biệt chữ hoa chữ thường, ta buộc thứ tự sắp xếp được xác định bằng một bản sao viết thường của mảng ban đầu.