ok en utilisant usort avec une fonction est pas si compliqué
C'est ce que j'avais auparavant dans mon code linéaire
function merchantSort($a,$b){
return ....// stuff;
}
$array = array('..','..','..');
pour trier je fais simplement
usort($array,"merchantSort");
Nous mettons maintenant à jour le code, supprimons toutes les fonctions globales et les plaçons à leur emplacement approprié. Maintenant tout le code est dans une classe et je ne peux pas comprendre comment utiliser la fonction usort pour trier le tableau avec le paramètre qui est une méthode objet au lieu d'une simple fonction
class ClassName {
...
private function merchantSort($a,$b) {
return ...// the sort
}
public function doSomeWork() {
...
$array = $this->someThingThatReturnAnArray();
usort($array,'$this->merchantSort'); // ??? this is the part i can't figure out
...
}
}
La question est de savoir comment appeler une méthode d'objet dans la fonction usort ()
Rendez votre fonction de tri statique:
private static function merchantSort($a,$b) {
return ...// the sort
}
Et utilisez un tableau pour le second paramètre:
$array = $this->someThingThatReturnAnArray();
usort($array, array('ClassName','merchantSort'));
$value_compare_func
est callable
array($this, 'merchantSort')
Vous devez passer $this
, Par exemple: usort( $myArray, array( $this, 'mySort' ) );
Exemple complet:
class SimpleClass
{
function getArray( $a ) {
usort( $a, array( $this, 'nameSort' ) ); // pass $this for scope
return $a;
}
private function nameSort( $a, $b )
{
return strcmp( $a, $b );
}
}
$a = ['c','a','b'];
$sc = new SimpleClass();
print_r( $sc->getArray( $a ) );
Dans cet exemple, je trie par un champ à l'intérieur du tableau appelé AverageVote.
Vous pouvez inclure la méthode dans l'appel, ce qui signifie que vous n'avez plus le problème de l'étendue de la classe, comme ceci ...
usort($firstArray, function ($a, $b) {
if ($a['AverageVote'] == $b['AverageVote']) {
return 0;
}
return ($a['AverageVote'] < $b['AverageVote']) ? -1 : 1;
});
Dans la classe de modèle Laravel (5.6), je l'ai appelée ainsi, les deux méthodes sont publiques statiques et utilisent PHP 7.2 sur Windows 64 bits.
public static function usortCalledFrom()
public static function myFunction()
J'ai appelé usortCalledFrom () comme ceci
usort($array,"static::myFunction")
Aucun d'entre eux étaient travail
usort($array,"MyClass::myFunction")
usort($array, array("MyClass","myFunction")