Hướng dẫn array sort by value of key php - sắp xếp mảng theo giá trị của key php

Php 7+

Kể từ Php 7, điều này có thể được thực hiện chính xác bằng cách sử dụng usort với chức năng ẩn danh sử dụng toán tử tàu vũ trụ để so sánh các yếu tố.

Bạn có thể thực hiện một loại tăng dần như thế này:

usort($inventory, function ($item1, $item2) {
    return $item1['price'] <=> $item2['price'];
});

Hoặc một loại giảm dần như thế này:

usort($inventory, function ($item1, $item2) {
    return $item2['price'] <=> $item1['price'];
});

Để hiểu cách thức hoạt động của nó, lưu ý rằng usort có chức năng so sánh do người dùng cung cấp phải hoạt động như sau (từ tài liệu):

Hàm so sánh phải trả về một số nguyên nhỏ hơn, bằng hoặc lớn hơn 0 nếu đối số đầu tiên được coi là nhỏ hơn, bằng hoặc lớn hơn thứ hai.

Và cũng lưu ý rằng <=>, nhà điều hành tàu vũ trụ,

trả về 0 nếu cả hai toán hạng đều bằng nhau, 1 nếu bên trái lớn hơn và -1 nếu bên phải lớn hơn

Đó chính xác là những gì usort cần. Trên thực tế, gần như toàn bộ sự biện minh được đưa ra để thêm <=> vào ngôn ngữ trong https://wiki.php.net/rfc/combined-comparison-operator là nó

Làm cho việc viết các cuộc gọi lại đặt hàng để sử dụng với usort() dễ dàng hơn


Php 5.3+

Php 5.3 đã giới thiệu các chức năng ẩn danh, nhưng chưa có toán tử tàu vũ trụ. Chúng ta vẫn có thể sử dụng usort để sắp xếp mảng của mình, nhưng nó dài hơn một chút và khó hiểu hơn:

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});

Lưu ý rằng mặc dù nó khá phổ biến đối với các bộ so sánh xử lý các giá trị số nguyên để chỉ trả về sự khác biệt của các giá trị, như ____10, chúng ta không thể làm điều đó một cách an toàn trong trường hợp này. Điều này là do giá là số điểm nổi trong ví dụ của người hỏi câu hỏi, nhưng chức năng so sánh mà chúng tôi chuyển đến usort phải trả lại số nguyên cho usort để hoạt động đúng:

Trả về các giá trị không định số từ hàm so sánh, chẳng hạn như float, sẽ dẫn đến một diễn viên nội bộ cho số nguyên của giá trị trả về của cuộc gọi lại. Vì vậy, các giá trị như 0,99 và 0,1 sẽ được chuyển thành giá trị số nguyên là 0, sẽ so sánh các giá trị như bằng nhau.non-integer values from the comparison function, such as float, will result in an internal cast to integer of the callback's return value. So values such as 0.99 and 0.1 will both be cast to an integer value of 0, which will compare such values as equal.

Đây là một cái bẫy quan trọng cần lưu ý khi sử dụng usort trong PHP 5.x! Phiên bản gốc của tôi về câu trả lời này đã gây ra sai lầm này và tôi đã tích lũy được mười phần trăm trên hàng ngàn lượt xem rõ ràng mà không có ai nhận thấy lỗi nghiêm trọng. Sự dễ dàng mà các thiếu hụt như tôi có thể làm hỏng các hàm so sánh chính xác là lý do mà toán tử tàu vũ trụ dễ sử dụng hơn đã được thêm vào ngôn ngữ trong Php 7.

Làm thế nào chúng ta có thể sắp xếp một mảng mà không cần sử dụng phương thức sắp xếp trong PHP?

hàm php sortArray () {$ inputArray = mảng (8, 2, 7, 4, 5); $ outArray = mảng (); cho ($ x = 1; $ x

  • PHP có một số chức năng liên quan đến việc sắp xếp các mảng và tài liệu này tồn tại để giúp sắp xếp tất cả.array keys, whereas others by the values:
    usort($inventory, function ($item1, $item2) {
        return $item2['price'] <=> $item1['price'];
    });
    
    4
  • Sự khác biệt chính là:
  • Một số loại dựa trên các phím mảng, trong khi các khóa khác theo các giá trị:
    usort($inventory, function ($item1, $item2) {
        return $item2['price'] <=> $item1['price'];
    });
    
    4
  • Có hay không mối tương quan giữa các khóa và giá trị được duy trì sau khi sắp xếp, có thể có nghĩa là các khóa được đặt lại bằng số (0,1,2 ...)
  • Thứ tự của loại: bảng chữ cái, tăng dần (thấp đến cao), giảm dần (cao đến thấp), tự nhiên, ngẫu nhiên hoặc người dùng được xác định
Lưu ý: Tất cả các chức năng sắp xếp này hoạt động trực tiếp trên chính biến mảng, trái ngược với việc trả lại một mảng được sắp xếp mới
Nếu bất kỳ chức năng sắp xếp nào trong số này đánh giá hai thành viên bằng nhau thì họ giữ lại thứ tự ban đầu của họ. Trước Php 8.0.0, đơn đặt hàng của họ không được xác định (việc sắp xếp không ổn định).Sắp xếp các thuộc tính chức năngTên chức năngSắp xếp theoDuy trì liên kết chính
array_multisort() giá trịThứ tự sắp xếp keys yes, int keys no Các chức năng liên quanarray_walk()
asort() giá trịVângđã xác định người dùngarsort()
arsort() giá trịVângđã xác định người dùngasort()
krsort() Chìa khóaVângđã xác định người dùngksort()
ksort() Chìa khóaVângđã xác định người dùngkrsort()
natcasesort() giá trịVângđã xác định người dùngnatsort()
natsort() giá trịVângđã xác định người dùngnatcasesort()
rsort() giá trịChìa khóađã xác định người dùngsort()
shuffle() giá trịChìa khóakhôngarray_rand()
sort() giá trịChìa khóađã xác định người dùngrsort()
uasort() giá trịVângđã xác định người dùnguksort()
uksort() Chìa khóaVângđã xác định người dùnguasort()
usort() giá trịChìa khóađã xác định người dùnguasort()

Chìa khóa

không

usort($inventory, function ($item1, $item2) {
    return $item2['price'] <=> $item1['price'];
});
5

usort($inventory, function ($item1, $item2) {
    return $item2['price'] <=> $item1['price'];
});
6

usort($inventory, function ($item1, $item2) {
    return $item2['price'] <=> $item1['price'];
});
7

usort($inventory, function ($item1, $item2) {
    return $item2['price'] <=> $item1['price'];
});
8

usort($inventory, function ($item1, $item2) {
    return $item2['price'] <=> $item1['price'];
});
9

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
0

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
1

" Matthew Rice " ¶

9 năm trước

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
2

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
3

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
1

oculiz tại gmail dot com ¶

11 năm trước

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
5

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
6

usort($inventory, function ($item1, $item2) {
    if ($item1['price'] == $item2['price']) return 0;
    return $item1['price'] < $item2['price'] ? -1 : 1;
});
1

Làm thế nào để bạn sắp xếp một mảng theo một giá trị cụ thể trong PHP?

PHP - Sắp xếp các hàm cho mảng rsort () - Sắp xếp mảng theo thứ tự giảm dần. asort () - Sắp xếp các mảng liên kết theo thứ tự tăng dần, theo giá trị. Ksort () - Sắp xếp các mảng liên kết theo thứ tự tăng dần, theo khóa. Arsort () - Sắp xếp các mảng liên kết theo thứ tự giảm dần, theo giá trị.rsort() - sort arrays in descending order. asort() - sort associative arrays in ascending order, according to the value. ksort() - sort associative arrays in ascending order, according to the key. arsort() - sort associative arrays in descending order, according to the value.

Làm cách nào để sắp xếp một mảng theo khóa?

Hàm ksort () sắp xếp một mảng kết hợp theo thứ tự tăng dần, theo khóa.Mẹo: Sử dụng hàm krsort () để sắp xếp một mảng kết hợp theo thứ tự giảm dần, theo khóa.Mẹo: Sử dụng hàm orort () để sắp xếp một mảng kết hợp theo thứ tự tăng dần, theo giá trị.. Tip: Use the krsort() function to sort an associative array in descending order, according to the key. Tip: Use the asort() function to sort an associative array in ascending order, according to the value.

Làm thế nào để bạn sắp xếp một mảng các đối tượng trong PHP?

Hàm usort () là một hàm sẵn có trong PHP được sử dụng để sắp xếp mảng các phần tử một cách có điều kiện với hàm so sánh nhất định.Hàm usort () cũng có thể được sử dụng để sắp xếp một mảng các đối tượng theo trường đối tượng.usort() function is an inbuilt function in PHP which is used to sort the array of elements conditionally with a given comparator function. The usort() function can also be used to sort an array of objects by object field.

Làm thế nào chúng ta có thể sắp xếp một mảng mà không cần sử dụng phương thức sắp xếp trong PHP?

hàm php sortArray () {$ inputArray = mảng (8, 2, 7, 4, 5);$ outArray = mảng ();cho ($ x = 1; $ x