为什么usort()不排序数组?

时间:2016-06-10 12:49:35

标签: php arrays sorting usort

<?php

$items=[
    ['name'=>'a','require'=>[]],
    ['name'=>'b','require'=>['a']],
    ['name'=>'c','require'=>['b']],
    ['name'=>'d', 'require'=>['c']]

];

shuffle($items);

usort($items, function($a,$b){
    if(in_array($b['name'],$a['require'])){
        return -1;
    }
    if(in_array($a['name'],$b['require'])){
        return 1;
    }
    return 0;
});

print_r($items);

我希望usort会重新调整原始排序数组,但每次我得到不同的排序数组。我做错了什么?

1 个答案:

答案 0 :(得分:2)

比较功能需要满足一些基本要求,例如:如果@RunWith(MockitoJUnitRunner.class) public class ServiceTest{ @Mock private UrlProvider urlProvider; @InjectMocks private Service service = new Service(); @Before public void init(){ when(urlProvider.getUrl()).thenReturn("http://test.url"); } ... } 为1,则a<b为-1。

你的功能没有意义,因此结果不可预测。