Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 对所有数组进行排序,但我需要一个属性_Php_Sorting - Fatal编程技术网

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];'));