【发布时间】:2012-02-09 14:26:39
【问题描述】:
我对 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 排序。但是,正如你所看到的,我刚刚完全失去了之前的排序。我在说什么呢?我想像以前一样保留数组排序,但作为 secondary 排序。我希望我很清楚。 实际上我想使用 usort() 之类的东西对数据进行排序(因此,完全自定义排序),但如果两个项目之间的排序字段相同,我想保持它们的 相对位置 em> 和以前一样。考虑到给定的示例,我希望Lieserl Einstein 出现在Mileva Einstein 之前,因为一开始就是这样。
【问题讨论】: