我期望能夠對多個列上的多維數組進行排序。爲了進一步複雜化,我希望能夠爲每個鍵/列設置特定的排序選項。我有什麼是類似於數據庫查詢的結果,但實際上並不是一個來源,因此需要使用PHP而不是SQL進行排序。使用指定的排序選項在多個「列」(鍵)上排列多個多元數組的陣列
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
)
)
我希望能夠對它進行排序,類似於可以用數據庫查詢完成的操作。哦,有時一個列/鍵需要用數字來指定。
我腦子裏想的是什麼類似於這樣:
$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);
我想直到結束是這樣的:
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
)
)
更新:我認爲,理想情況下,解決方案將導致動態創建
array_multisort($city, SORT_ASC, SORT_STRING, $zip, SORT_DESC, SORT_NUMERIC, $last_name, SORT_ASC, SORT_STRING, $inputArray);
問題是我不想在那裏「硬編碼」那些關鍵名稱。我試圖創建一個基於的解決方案示例#3從array_multisort()
文檔中排序數據庫結果最終使用array_multisort()
但我似乎無法找到一種方法來使用我的動態構建的參數列表array_multisort()
。
我的嘗試是「連鎖」這些參數組合成一個數組,然後
call_user_func_array('array_multisort', $functionArgs);
,在一個
Warning: Parameter 2 to array_multisort() expected to be a reference, value given in...
我同意沒有一個「正確」的答案,但補充一點,這與我的需求非常接近,除了例外,我需要對索引數組進行排序,而不是關聯數組。 – 2014-05-07 11:02:33