2016-06-10 14 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); 

Ich erwarte, dass usort mich ursprünglichen sortierten Array rerturn, aber jedes Mal bekomme ich verschiedene sortierte Arrays. Was mache ich falsch?Warum usort() Array nicht sortieren?

+0

warum sollten Sie dies tun müssen? ein bestimmter Zweck dahinter? – RJParikh

Antwort

2

Vergleichsfunktionen müssen einige grundlegende Anforderungen erfüllen, z.B. Wenn a<b 1 ist, dann ist b<a -1.

Ihre Funktion ergibt keinen Sinn, daher die unvorhersehbaren Ergebnisse.