Php 对所有数组进行排序,但我需要一个属性
这就是贝娄的问题Php 对所有数组进行排序,但我需要一个属性,php,sorting,Php,Sorting,这就是贝娄的问题 $array[] = [ 'priority' => 0, 'name' => 'a' ]; $array[] = [ 'priority' => 0, 'name' => 'b' ]; $array[] = [ 'priority' => 10, 'name' => 'c' ]; $array[] = [ 'priority' => 0, 'name' => 'b'
$array[] = [
'priority' => 0,
'name' => 'a'
];
$array[] = [
'priority' => 0,
'name' => 'b'
];
$array[] = [
'priority' => 10,
'name' => 'c'
];
$array[] = [
'priority' => 0,
'name' => 'b'
];
function sortByPriority($a, $b){
if ($a['priority'] == $b['priority']) {
return 0;
}
return ($a['priority'] < $b['priority']) ? -1 : 1;
}
var_dump($array);
uasort($array, 'sortByPriority');
var_dump($array);
$array[]=[
“优先级”=>0,
'name'=>'a'
];
$array[]=[
“优先级”=>0,
“名称”=>“b”
];
$array[]=[
“优先级”=>10,
'name'=>'c'
];
$array[]=[
“优先级”=>0,
“名称”=>“b”
];
函数排序优先级($a,$b){
如果($a['priority']=$b['priority']){
返回0;
}
回报($a['priority']<$b['priority'])?-1:1;
}
变量转储($数组);
uasort($array,'sortByPriority');
变量转储($数组);
我希望只有第三个元素是最后一个,但名称为'a'的元素现在位于第三个位置。为什么?一定是第一名
UPD:
我希望订购(a、b、b、c),但我在屏幕b、b、a、c上看到ryan vincent给我一个解决方案链接,谢谢 更新 更好的解决方案是使用
因为您只按优先级排序,而不按名称排序,所以这是在偏移量0、1、3和2之间随机排序的。答案总是最后一个。ty。我不想按名称排序数组-只按优先级排序。这是不可能的?唉,对于相等的条目,usort并不“稳定”:但它是按优先级排序的。您想要
(0,0,0,10)
并得到了它。如果这不是你想要的,那么你也需要调整你的函数来考虑名字。我只想在需要时改变元素的位置。在我的示例中,名为'a'的元素不需要更改位置
//decorate
array_walk( $array,create_function('&$v, $k', '$v = [$v[\'priority\'], $k, $v];'));
//sort
sort($array);
//undecorate
array_walk( $array, create_function('&$v, $k', '$v = $v[2];'));