2016-06-10 2 views
-1
<?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가 나를 원래의 정렬 된 배열로 다시 만들 것이라고 기대하지만, 나는 매번 다른 정렬 된 배열을 얻는다. 내가 뭘 잘못 했니?배열을 정렬하지 않는 이유는 무엇입니까?

+0

왜 이렇게해야합니까? 뒤에 어떤 특정 목적? – RJParikh

답변

2

비교 함수는 몇 가지 기본 요구 사항을 충족해야합니다. a<b이 1이면 b<a은 -1입니다.

함수가 이해가되지 않아 예측할 수없는 결과가 발생합니다.

관련 문제