首先,是的,這是一個重複的問題,在這裏已經被問了100次,並且我已經閱讀了很多帖子,但是給出的示例並不工作100 %對我來說,我無法弄清楚我要去哪裏錯了。PHP排序多維數組,只能對一列進行排序
我想通過'distance'鍵對這樣一個數組進行排序,並且我希望排序在整個數組中被「擴展」,以便重新排列數組中的所有鍵。本質上,就像您在電子表格中對列進行排序並在所有列上擴展排序一樣。
這裏的樣品陣列:
$locations = array (
[phone] => Array (
[0] => 555-123-1234
[1] => 555-456-4321
[2] => 555-789-1122
[3] => 555-321-1111)
[address] => Array (
[0] => 123 Main Street BigCity, NY 12345
[1] => 456 Maple Street Somewhere, UT 87654
[2] => 999 1st Ave MyTown, VA 23456
[3] => 321 2nd Ave MyTown, VA 23456)
[distance] => Array (
[0] => 24.56
[1] => 13.05
[2] => 23.99
[3] => 1.75)
[name] => Array (
[0] => First Location
[1] => Second Location
[2] => Third Location
[3] => Fourth Location)
)
我試圖用「距離」的數組排序,我同時使用在array_multisort()函數和usort()函數試圖...但只有「multisort」通過僅對距離進行排序而不是根據距離對整個陣列進行排序,可以給我幾乎可用的結果。
我的功能:
array_multisort($locations['distance'], SORT_NUMERIC);
我然後運行一個「for」循環遍歷數組和關鍵吐出值。結果是距離是有序的,但地點名稱,地址等不會被重新排序。
我在這裏錯過了什麼?
謝謝!
感謝偉大的解釋和例子!我猜想我不瞭解的部分是這些函數如何看待數組。但是,在使用你的例子時,我不得不按行排序我想要的所有列。我不確定這是爲什麼,但如果我在multisort函數中添加所有行,它將起作用。任何想法爲什麼這可能是? – gtr1971 2012-02-21 15:42:50
'array_multisort()'可以用很多方式使用,但是這個選項的行爲大致類似於SQL查詢中的'order by'子句。而在SQL中,你總是處理行。您必須傳遞要按(列)排序的數據集,以便知道如何對數據進行排序,然後將整個數據集作爲最後一個參數傳遞,以便可以根據這些規則對數據集進行排序。所以它就像'SELECT phone,address,distance,name FROM locations ORDER BY distance' – DaveRandom 2012-02-21 17:26:11
這相當於'SELECT phone,address,distance,name FROM locations ORDER BY distance,address,name,phone' - each additional pair of完整數據集「$ locationsAsRows」之前的'$ col,SORT_CONST'值與'ORDER BY'子句的另一個級別相似。所以'$ locations ['phone'],SORT_ASC'可能永遠不會到達,除非兩個記錄的'distance','address'和'name'具有完全相同的值。 – DaveRandom 2012-02-22 15:25:38