我有一个看起来像这样的简单数组:
array (size=6)
0 =>
array (size=2)
'id' => int 1
'primary' => boolean false
1 =>
array (size=2)
'id' => int 2
'primary' => boolean false
2 =>
array (size=2)
'id' => int 3
'primary' => boolean false
3 =>
array (size=2)
'id' => int 4
'primary' => boolean true
4 =>
array (size=2)
'id' => int 5
'primary' => boolean false
5 =>
array (size=2)
'id' => int 6
'primary' => boolean false
生成数组时,它总是按 排序id
,如上所示。我想做的是让数组usort()
元素成为第一个元素。总是只有一个元素是。primary
TRUE
primary
TRUE
然后我写了一个简单的比较函数来使用usort()
:
$data = array(
array('id' => 1, 'primary' => FALSE),
array('id' => 2, 'primary' => FALSE),
array('id' => 3, 'primary' => FALSE),
array('id' => 4, 'primary' => TRUE),
array('id' => 5, 'primary' => FALSE),
array('id' => 6, 'primary' => FALSE),
);
function sortArray($a, $b){
if($a['primary']){
return -1;
}elseif($b['primary']){
return 1;
}else{
return 0;
}
}
var_dump($data);
usort($data, 'sortArray');
var_dump($data);
虽然元素 withprimary = TRUE
现在被提升到前面,但其余元素现在以相反的顺序排序,并且元素 withid = 5
不合适:
array (size=6)
0 =>
array (size=2)
'id' => int 4
'primary' => boolean true
1 =>
array (size=2)
'id' => int 5
'primary' => boolean false
2 =>
array (size=2)
'id' => int 6
'primary' => boolean false
3 =>
array (size=2)
'id' => int 3
'primary' => boolean false
4 =>
array (size=2)
'id' => int 2
'primary' => boolean false
5 =>
array (size=2)
'id' => int 1
'primary' => boolean false
我知道我可以比较 id,如果两个元素的primary
属性都为 false:
function sortArray($a, $b){
if($a['primary']){
return -1;
}elseif($b['primary']){
return 1;
}else{
return $a['id'] > $b['id'];
}
}
但是,为什么要usort
随机化我的其他元素的顺序?是否可以使用usort()
仅提升元素而保持数组的其余部分不变?