Tôi đang tìm cách sắp xếp một mảng các mảng đa chiều trên nhiều cột. Để làm phức tạp hơn nữa, tôi muốn có thể thiết lập các tùy chọn sắp xếp cụ thể cho mỗi khóa/cột. Tôi có những gì là tương tự như kết quả của một truy vấn DB, nhưng không thực sự đến từ một, do đó cần phải sắp xếp nó trong PHP chứ không phải là SQL.Sắp xếp mảng Mảng đa điểm trên nhiều cột "cột" (khóa) với tùy chọn sắp xếp được chỉ định
Array
(
[0] => Array
(
[first_name] => Homer
[last_name] => Simpson
[city] => Springfield
[state] => Unknown
[zip] => 66735
)
[1] => Array
(
[first_name] => Patty
[last_name] => Bouvier
[city] => Scottsdale
[state] => Arizona
[zip] => 85250
)
[2] => Array
(
[first_name] => Moe
[last_name] => Szyslak
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[3] => Array
(
[first_name] => Nick
[last_name] => Riviera
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
)
Tôi muốn có thể sắp xếp nó tương tự như những gì có thể được thực hiện bằng truy vấn DB. Oh, và đôi khi một cột/khóa cần được xác định theo số.
gì tôi nghĩ trong đầu là một cái gì đó tương tự như sau:
Array
(
[0] => Array
(
[first_name] => Nick
[last_name] => Riviera
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[1] => Array
(
[first_name] => Moe
[last_name] => Szyslak
[city] => Scottsdale
[state] => Arizona
[zip] => 85255
)
[2] => Array
(
[first_name] => Patty
[last_name] => Bouvier
[city] => Scottsdale
[state] => Arizona
[zip] => 85250
)
[3] => Array
(
[first_name] => Homer
[last_name] => Simpson
[city] => Springfield
[state] => Unknown
[zip] => 66735
)
)
UPDATE:: Tôi nghĩ rằng lý tưởng, một
$sortOptions = array(array('city', SORT_ASC, SORT_STRING),
array('zip', SORT_DESC, SORT_NUMERIC),
array(2, SORT_ASC, SORT_STRING) // 2='last_name'
);
$sorter = new MultiSort($data, $sortOptions);
$sortedData = $sorter->getSortedArray() ;
print_r($jmsSorted);
Những gì tôi muốn kết thúc với điều này là giải pháp sẽ dẫn đến việc tạo động
array_multisort($city, SORT_ASC, SORT_STRING, $zip, SORT_DESC, SORT_NUMERIC, $last_name, SORT_ASC, SORT_STRING, $inputArray);
vấn đề là tôi không muốn phải "mã cứng" những tên chính trong đó. Tôi đã thử tạo một giải pháp dựa trên Ví dụ # 3 Sắp xếp kết quả cơ sở dữ liệu từ tài liệu array_multisort()
kết thúc bằng cách sử dụng array_multisort()
nhưng tôi dường như không thể tìm cách sử dụng danh sách đối số được tạo động của mình cho array_multisort()
.
nỗ lực của tôi là "chuỗi" những tranh cãi với nhau thành một mảng và sau đó
call_user_func_array('array_multisort', $functionArgs);
Đó kết quả trong một
Warning: Parameter 2 to array_multisort() expected to be a reference, value given in...
Tôi đồng ý không có một câu trả lời "đúng", nhưng darn nó, điều này khá gần với nhu cầu của tôi, ngoại trừ việc tôi cần sắp xếp một mảng được lập chỉ mục, không phải là một mảng kết hợp. –
Tôi nhận được một "Cảnh báo: usort(): Mảng được sửa đổi bởi hàm so sánh người dùng", sử dụng mã này. Tôi đã tìm thấy lời giải thích sau đây, sẽ bình luận khi tôi có thể sửa nó: http://stackoverflow.com/questions/3235387/usort-array-was-modified-by-the-user-comparison-function – vicenteherrera