2015-11-26 9 views
5

In PHP, usort Funktion nimmt zwei Argumente: Array zu sortieren und einen Rückruf. Der Rückruf benötigt auch zwei Argumente: $ a und $ b. Dann vergleichen wir diese beiden in irgendeiner Weise, die wir wollen. Es überrascht mich immer, denn dieser Anwendungsfall für usort ist nicht allzu üblich. Normalerweise sortieren wir Werte nach derselben Eigenschaft oder verwenden dieselben Logik für $ a und $ b. Zum Beispiel, wenn wir durch die Länge sortieren:Gibt es in PHP einfach usort?

$animals = ['dog', 'tiger', 'giraffe', 'bear']; 

usort($animals, function ($a, $b) { 
    return strlen($a) - strlen($b); 
}); 

das funktionieren wird, aber wir müssen sagen strlen zweimal. Es wäre schöner, es so zu sagen:

usort($animals, function ($element) { 
    return strlen($element); 
}); 

Oder auch so:

usort($animals, 'strlen'); 

ich diese Art der Funktion geschrieben habe ich (PHP 7 Leckereien mit, aber es kann auf einfache Weise geändert werden PHP 5):

Es funktioniert perfekt, aber ist es nicht in PHP bereits in einer anderen Funktion gebaut? Wenn nicht, warum unterstützt PHP diese beliebte und bequeme Art der Sortierung nicht?

+3

für den letzten Teil möchten Sie vielleicht die PHP-Gruppe anstelle von uns fragen ... lol – Andrew

+0

Ich habe Usort noch nie verwendet, und wenn ich mir das anschaue, bin ich etwas verwirrt von der Callback-Funktion. Die Strale von $ a ist 3 und die Strale von $ b ist 5. Also 3-5 ist -2? Wie benutzt man die Nummer -2 um $ a und $ b zu sortieren? Entschuldigung, ich weiß, du bist derjenige, der hier die Fragen stellt, aber ich bin nur sehr neugierig. – frosty

+0

@Andrew Du hast Recht, aber es ist, wenn ich sicher bin, dass ich etwas nicht vermisse. Das "Warum" bedeutet hier "Vermisse ich etwas?". –

Antwort

2

Es funktioniert perfekt, aber ist es nicht in PHP bereits in einer anderen Funktion gebaut?

Nr

Wenn nicht, warum PHP nicht diese sehr beliebte und komfortable Möglichkeit, unterstützt Sortierung?

sollte eine Sprache generic Tools zur Verfügung zu stellen entworfen werden, um Dinge ohne Versorgung eine Vielzahl von Funktionen für bestimmte Anwendungsfälle gerecht zu erledigen, die nicht populär sein können oder nicht, gewährt wird, dass die Leistung von nicht negativ beeinflusst eine solche Entscheidung.

+0

Nun, PHP bietet viel exotischere Funktionen als die, die ich erwähnte. Arrays alleine haben eine Menge Funktionen in PHP, von denen einige gar nicht generisch sind. –

+0

@RoboRobok Ja, ich war vorsichtig, den Teil wegzulassen, in dem php einige der Best Practices des Sprachdesigns verletzt ;-) –

0

Einfache Antwort: Da niemand es angefordert hat und niemand es implementiert hat.

PHP wird von Leuten betrieben, die einen Patch haben oder andere dazu motivieren, einen Patch zu schreiben. Wenn ein Feature für niemanden interessant ist, wird es nicht angefragt und nicht implementiert.

Ich glaube, dass die Funktion, die Sie wollen, zu spezifisch ist und die Verstärkung zu klein ist.

Aber wenn Sie es wollen: Fügen Sie eine Feature-Anfrage über bugs.php.net hinzu oder schlagen Sie einen Patch über github vor.