我有一個PHP usort()
的問題。讓我們假設我有一個這樣的數組(這是一個簡化的,我還沒有與名稱的工作,我有對象的數組,不是數組):PHP usort不需要的行爲
$data = array(
array('name' => 'Albert', 'last' => 'Einstein'),
array('name' => 'Lieserl', 'last' => 'Einstein'),
array('name' => 'Alan', 'last' => 'Turing' ),
array('name' => 'Mileva', 'last' => 'Einstein'),
array('name' => 'Hans Albert', 'last' => 'Einstein')
);
正如你所看到的,數組排序隨意。
現在,如果想通過last
對它進行排序,我做的:
function sort_some_people($a, $b) { return strcmp($a['last'], $b['last']); }
usort($data, 'sort_some_people');
而且我有:
Array (
[0] => Array ([name] => Mileva [last] => Einstein)
[3] => Array ([name] => Albert [last] => Einstein)
[1] => Array ([name] => Lieserl [last] => Einstein)
[2] => Array ([name] => Hans Albert [last] => Einstein)
[4] => Array ([name] => Alan [last] => Turing )
)
這是確定的,現在他們被last
排序。但是,正如你所看到的,我已經完全失去了以前的排序。我在說什麼?我想保留它之前的數組排序,但是作爲排序的輔助。我希望我很清楚。 實際上我想使用usort()
(所以,一個完全自定義的排序)的東西來排序數據,但如果排序字段是相同的兩個項目之間,我想保留他們的相對位置像以前一樣。考慮給出的例子,我想Lieserl Einstein
出現在Mileva Einstein
之前,因爲它在開始時就是這樣。
接受。無論如何,我以更簡潔的方式解決。在'usort()'之前,我將原始數組位置(索引)存儲在每個對象中(即'$ data [$ i] - > original_index = $ i'),然後在比較函數中檢查此值,返回'0'(即相同的排序值)。很簡單,聰明,不是嗎? :) 謝謝你們! – 2012-02-09 20:55:38