Hướng dẫn sort array object php

To sort on one column of values, a combination of array_column[] and array_multisort[] is one sensible way. Demo

array_multisort[array_column[$array, 'count'], $array];

Or only call upon usort[] with the spaceship operator to perform less iterating in this scenario. Demo

usort[$array, fn[$a, $b] => $a->count  $b->count];

Notice that although the count values are cast as string type values in the input array, both sorting functions will correctly sort the values numerically instead of alphabetizing them [erroneously putting 23420 before `420]. This is a reliable default feature.

Even if you are variably declaring the column to sort on, both approaches allow the variable to be used without any addition techniques.

Multisort Demo with variable

$property = 'count';
array_multisort[array_column[$array, $property], $array];

Usort Demo with variable

$property = 'count';
usort[$array, fn[$a, $b] => $a->$property  $b->$property];

Both native sorting functions modify by reference, so do not try to access the sorted array by their return value.

array_multisort[]'s default sorting direction is ascending, so it is of no benefit to explicitly use the SORT_ASC between the two array parameters. If descending sorting is desired, write SORT_DESC between the two arrays [as the second parameter].

usort[] will sort ascending when the custom function body puts $a data on the left side of the spaceship operator and $b data on the right side. For sorting in a descending direction, just write $b data on the left and $a data on the right.

Both approaches are capable of receiving multiple sorting rules, but because this question only asks to sort on a single column, that guidance is inappropriate here.

It will be less efficient to call a function [like strcmp[]] on every iteration while sorting. This is no longer best practice. Neither is using a two-way comparison [like > or

Như bạn có thể thấy, chúng tôi không chỉ mất liên kết của mọi người với các loại trái cây yêu thích của họ, chúng tôi còn mất đi tên của những người khác nhau. Mỗi giá trị đã sắp xếp được chỉ định một chỉ số số mới dựa trên vị trí của nó trong mảng được sắp xếp.

Để giúp bạn giải quyết vấn đề này một cách dễ dàng, PHP có hai hàm khác nhau duy trì liên kết khóa - giá trị trong khi sắp xếp các mảng theo các giá trị của chúng. Hai hàm này là asort[]arsort[]. Đoạn code sau sắp xếp mảng tương tự $fruit_preferences nhưng sử dụng asort[].

Rõ ràng từ ví dụ trên, giá trị Apple chuyển lên đầu tiên trong khi vẫn duy trì mối liên hệ với Patricia. Tên trái cây có thể được sắp xếp ngược lại dễ dàng bằng cách sử dụng hàm arsort[].

Cả hai hàm này đều chấp nhận các cờ sắp xếp giống nhau làm giá trị của tham số tùy chọn thứ hai của chúng là sort[]rsort[].

Sắp xếp các phần tử mảng theo giá trị với các hàm do người dùng định nghĩa

Bốn chức năng sắp xếp có thể dễ dàng xử lý các nhu cầu sắp xếp phổ biến của bạn với sự trợ giúp của các cờ khác nhau. Tuy nhiên, đôi khi tiêu chí của bạn để so sánh các yếu tố mảng có thể khác nhau.

Cho rẵng bạn có một loạt các từ ngẫu nhiên cần được sắp xếp theo thứ tự abc. Tuy nhiên, bạn cũng muốn sắp xếp chúng dựa trên chiều dài của chúng trước khi sắp xếp chúng theo thứ tự bảng chữ cái. Ví dụ, zoo sẽ nằm sau apple trong cách sắp xếp theo thứ tự chữ cái truyền thống. Tuy nhiên, nếu muốn hiển thị các từ ngắn trước những từ dài hơn, zoo sẽ xuất hiện trước apple. Trong cùng một tập hợp các chữ cái, ape sẽ nằm trước zoo theo thứ tự chữ cái.

Về cơ bản, ban đầu các từ được sắp xếp dựa trên độ dài của chúng và sau đó các từ có cùng số lượng chữ cái được sắp xếp theo thứ tự abc trong nhóm riêng của chúng. Kiểu sắp xếp này không được tích hợp vào PHP nên chúng ta sẽ phải tự viết hàm sắp xếp riêng.

Điều mà PHP làm trong trường hợp này là cung cấp cho bạn một vài hàm có thể được sử dụng để truyền vào mảng mà bạn muốn sắp xếp cùng với tên của hàm sắp xếp của riêng bạn.

Bạn có thể sử dụng hàm usort[] để sắp xếp các giá trị mảng trong các mảng thông thường. Tương tự, bạn có thể sử dụng hàm uasort[] để sắp xếp các giá trị trong các mảng liên kết trong khi vẫn duy trì các liên kết khóa - giá trị.

Đoạn code dưới đây cho thấy cách thực hiện hành vi này.

Trong các hàm callback dùng để sắp xếp tùy chỉnh, chúng ta phải trả về một số nguyên nhỏ hơn 0 để cho thấy giá trị đầu tiên nhỏ hơn giá trị thứ hai. Trả về 0 nếu giá trị đầu tiên bằng giá trị thứ hai. Trả về một số nguyên lớn hơn 0 nếu giá trị đầu tiên lớn hơn giá trị thứ hai.

Vì tiêu chí sắp xếp chính của chúng tôi là độ dài của chuỗi, chúng tôi trực tiếp trả về -1 nếu từ đầu tiên ngắn hơn từ thứ hai. Tương tự, chúng tôi trực tiếp trả về 1 nếu từ đầu tiên dài hơn từ thứ hai. Nếu hai từ có độ dài bằng nhau, chúng ta so sánh chúng theo thứ tự bảng chữ cái bằng cách sử dụng hàm strcmp[] và trả về giá trị của nó.

Như bạn có thể thấy trong kết quả, hàm sắp xếp tùy chỉnh của chúng tôi sắp xếp lại các từ chính xác theo cách chúng tôi muốn.

Sắp xếp một mảng theo khóa [key]

Sắp xếp một mảng dựa trên các khóa của nó thường hữu ích khi bạn đang xử lý các mảng liên kết. Chẳng hạn, bạn có thể có một mảng với thông tin về tổng số sân bay ở các quốc gia khác nhau. Giả sử rằng tên của các quốc gia khác nhau là khóa và số lượng sân bay là giá trị, bạn có thể muốn sắp xếp tên quốc gia theo thứ tự bảng chữ cái. Điều này rất dễ thực hiện với các hàm ksort[]krsort[]. Cả hai hàm này sẽ duy trì liên kết khóa - giá trị của các phần tử mảng sau khi sắp xếp. Hàm ksort[] sắp xếp các phím từ thấp đến cao và krsort[] sắp xếp các phím từ cao đến thấp.

Dưới đây là một ví dụ sắp xếp cơ bản:

Bạn cũng có thể không cần tự xây dựng hàm của riêng bạn để sắp xếp các khóa của mảng bằng hàm uksort[]. Giống như hàm usort[], hàm callback trong uksort[] cũng yêu cầu bạn trả về một số nguyên nhỏ hơn 0 nếu khóa thứ nhất nhỏ hơn khóa thứ hai và số nguyên lớn hơn 0 nếu khóa thứ nhất lớn hơn khóa thứ hai. Hàm này cũng duy trì liên kết khóa - giá trị của các phần tử trong mảng.

Trong ví dụ trên, chúng tôi đã sử dụng hàm sắp xếp tùy chỉnh của phần trước để sắp xếp tên của các quốc gia trước theo độ dài của tên và sau đó theo thứ tự bảng chữ cái.

Sắp xếp các mảng nhiều chiều trong PHP

Việc đảm nhận những thông tin đa chiều rõ ràng rất phổ biến trong đời thường. Chẳng hạn, các tổ chức sẽ lưu trữ điểm của tất cả sinh viên của nhiều môn học trong một bảng thay vì tạo các bảng mới cho mỗi môn. Nếu bạn phải lưu trữ thông tin tương tự trong PHP, bạn cũng muốn làm điều đó bằng cách sử dụng một mảng đa chiều thay vì mảng riêng cho từng đối tượng.

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách sắp xếp một mảng nhiều chiều bằng cách sử dụng danh sách các tòa nhà cao nhất thế giới làm ví dụ. Mảng của chúng tôi sẽ chứa thông tin về tên của tòa nhà, thành phố và quốc gia nơi nó tọa lạc, số tầng và tổng chiều cao tính bằng mét cùng với năm mà nó được xây dựng.

Khi bạn muốn sắp xếp các giá trị trong một mảng nhiều chiều dựa trên một field cụ thể, bạn chỉ cần sử dụng hàm usort[]. Ví dụ dưới đây sẽ giúp bạn hiểu kỹ thuật này tốt hơn.

Trong ví dụ trên, thông tin về mỗi tòa nhà được lưu trữ trong mảng riêng của nó bên trong mảng chính $heightest_buildings. Hàm storey_sort[] chỉ cần trừ số tầng trong tòa nhà thứ hai ra khỏi tòa nhà thứ nhất để xác định tòa nhà nào nhỏ hơn theo tiêu chí của chúng tôi. Chúng tôi không phải lo lắng về việc trả lại một giá trị âm hoặc dương cụ thể vì tất cả các giá trị âm có nghĩa là nhỏ hơn và tất cả các giá trị dương có nghĩa là lớn hơn.

Cuối cùng, chúng tôi chỉ lặp qua mảng chính và in ra thông tin về từng tòa nhà.

Tổng kết

Trong hướng dẫn này, tôi đã chỉ cho bạn một số hàm khác nhau trong PHP có thể được sử dụng để sắp xếp các mảng theo khóa hoặc giá trị của chúng. Chúng tôi cũng đã biết được cách sắp xếp một mảng theo các khóa hoặc giá trị của nó bằng các tiêu chí sắp xếp tùy chỉnh của riêng chúng tôi với sự trợ giúp của các hàm uksrot[]uasort[]. Phần cuối thảo luận cách sắp xếp tất cả các giá trị trong một mảng nhiều chiều chỉ bằng một field cụ thể.

Tôi hy vọng bạn đã học được điều mới mẻ qua hướng dẫn này. Nếu bạn có bất kỳ câu hỏi hoặc đề xuất nào, xin vui lòng cho tôi biết trong phần bình luận. Cách tốt nhất để học là thử và tạo ra một số ví dụ của riêng bạn, sắp xếp các mảng bằng cách sử dụng các hàm này.

Chủ Đề