Làm cách nào để sắp xếp mảng đa chiều theo thứ tự bảng chữ cái trong PHP?

Khi làm việc trên một trang web đa ngôn ngữ, chúng ta thường phải xử lý các ký tự đặc biệt và có dấu

Khi làm việc trên một trang web đa ngôn ngữ, chúng ta thường phải xử lý các ký tự đặc biệt và có dấu. Ở Québec [Canada], hầu hết các trang web đều là song ngữ. Điều này có thể khiến các nhà phát triển đau đầu khi xử lý việc sắp xếp các mảng theo thứ tự bảng chữ cái do “caractères spéciaux” [tiếng Pháp cho các ký tự đặc biệt]

Tôi đã phát triển một vài phương pháp có thể giúp khắc phục những khó khăn khi sắp xếp mảng đa chiều

Vấn đề

Giả sử chúng ta có một mảng đa chiều gồm các đối tượng danh mục được trả về bởi một API mà chúng ta muốn sắp xếp theo thứ tự bảng chữ cái theo tên danh mục cho một ngôn ngữ cụ thể

Việc sắp xếp thứ tự mảng này một cách chính xác là một thách thức do các ký tự được đánh dấu và do cách định dạng mảng [với một mảng đối tượng]

Giải pháp

Tôi đã giải quyết vấn đề này bằng cách tạo hai chức năng khác nhau trong StringHelper. lớp php có thể được sử dụng trong ứng dụng

Trình trợ giúp chuỗi. php

Hai chức năng thoạt nhìn có vẻ phức tạp, nhưng thực ra không phải vậy

Giải thích và kết quả [sắp xếp mảng nhiều chiều] 🧙‍♂️

Hàm đầu tiên nhận 3 tham số là tham chiếu mảng nhiều chiều [hay mảng đối tượng], phần tử và khóa dùng để sắp xếp mảng

Giả sử chúng ta muốn sắp xếp mảng trước theo tên tiếng Pháp. Các thông số sẽ là

alphabeticalCompareArrayByKey[$categories, 'names', 'fr'];

Vì chúng tôi đang gửi mảng dưới dạng tham chiếu, không cần gán lại nó thành một biến. Hàm usort sắp xếp một mảng theo các giá trị bằng hàm so sánh do người dùng xác định. Hàm so sánh của chúng tôi là so sánh chuỗi phân biệt chữ hoa chữ thường an toàn nhị phân. strcasecmp[]

Trong quá trình so sánh, chúng tôi đảm bảo rằng các ký tự có dấu được thay thế bằng các ký tự phù hợp. é = e, â = a]

So sánh của chúng tôi sau đó sẽ thành công. 💪

Ví dụ trước chỉ hoạt động với một mảng các đối tượng, nhưng bạn có thể dễ dàng điều chỉnh nó để so sánh một mảng các đối tượng bằng cách sửa đổi phần strcasecmp[] bằng cách

Sắp xếp mảng nhiều chiều theo phần tử chứa ngày tháng. Sử dụng hàm usort[] để sắp xếp mảng. Hàm usort[] là hàm dựng sẵn trong PHP sắp xếp một mảng đã cho bằng cách sử dụng hàm so sánh do người dùng định nghĩa. Hàm này gán các khóa tích phân mới bắt đầu từ 0 cho các phần tử mảng

cú pháp

boolean usort[ $array, "function_name"]

Thông số. Hàm này chấp nhận hai tham số như được hiển thị trong cú pháp trên và được mô tả bên dưới

  • mảng $. Tham số này chỉ định mảng mà bạn muốn sắp xếp
  • Tên chức năng. Tham số này chỉ định tên của hàm do người dùng xác định để so sánh các giá trị và sắp xếp mảng được chỉ định bởi tham số $array. Hàm này trả về một giá trị số nguyên dựa trên các điều kiện sau. Nếu hai đối số bằng nhau thì nó trả về 0, Nếu đối số thứ nhất lớn hơn thứ hai, nó trả về 1 và nếu đối số thứ nhất nhỏ hơn thứ hai, nó trả về -1

Giá trị trả về. Hàm này trả về giá trị kiểu Boolean. Nó trả về TRUE trong trường hợp thành công và FALSE trong trường hợp thất bại

Chúng tôi sử dụng strtotime để chuyển đổi chuỗi thời gian đã cho thành đối tượng dấu thời gian. Khi chúng tôi có dấu thời gian, chúng tôi trừ chúng để quyết định lớn hơn

Khi bạn cố gắng sử dụng các hàm

Chủ Đề