À l'aide de usort en php pour trier un tableau d'objets?
J'ai regardé usort, mais je suis encore un peu confus...
Voici ce que l' $monobjet objet ressemble:
Array
(
[0] => stdClass Object
(
[tid] => 13
[vid] => 4
)
[1] => stdClass Object
(
[tid] => 10
[vid] => 4
)
[2] => stdClass Object
(
[tid] => 34
[vid] => 4
)
[3] => stdClass Object
(
[tid] => 9
[vid] => 4
)
J'ai vu ceci:
function cmp( $a, $b )
{
if( $a->weight == $b->weight ){ return 0 ; }
return ($a->weight < $b->weight) ? -1 : 1;
}
usort($myobject,'cmp');
Je suis en train de trier en fonction à trois fois par jour, mais je suppose que je ne sais pas vraiment si je dois changer le poids de quelque chose? Ou est-ce juste du travail? Je l'ai essayé, mais rien en sortie...
Vous devez vous connecter pour publier un commentaire.
cpm est l'un rappel fonction usort utilise pour comparer les objets complexes (comme les vôtres) pour comprendre comment les trier. modifier cmp pour votre utilisation (ou de renommer tout ce que vous voulez)
http://www.php.net/usort
J'ai essayé d'écrire une comparaison de trois heures. Il est très facile en effet, mais je pensais qu'il me manquait quelque chose et il a écrit de nouveau et de nouveau à partir de zéro modification de l'algorithme dans beaucoup de façons de le tester avec mon tableau d'échantillons.
Enfin, j'ai réalisé que le problème est interne uasort fonction. Il ne finit pas la comparaison avec tous les éléments. Je ne me souviens pas le nom de l'algorithme utilisé pour l'instant, mais j'utilise moi-même une version améliorée (ot le mien) en C++. L'algorithme utilise un binaire-arbre comme la méthode de comparaison par diviser le tableau en autant de paires que nécessaire dans un appel récursif de la fonction de tri avec de nouveaux indices (inférieure, limite supérieure) à chaque fois.
Lorsque la tranche est un élément, puis supérieur et inférieur, les indices sont les mêmes et la fonction pense qu'il a fini (à gérer tous les éléments), bien que ce dernier élément n'a pas été évalué. Les fonctions de tri à l'aide de l'algorithme échoue lorsque la plus-bloc interne a un nombre impair. Il fonctionne très bien 2, 4, 8 .... les éléments, mais ne peux pas travailler avec 3, 5, 7, etc... L'état exact de l'échec dépend des éléments de l'ordre de tri. Les chiffres peuvent ne pas toujours être utile.
J'ai résolu le problème il y a des années. Je ne peux pas le résoudre par moi-même pour PHP maintenant, parce que je n'ai pas de compilateur PHP et je n'ai pas le code source PHP soit. Mais si n'importe qui de l'équipe de développement de PHP me contacte, je peux fournir la copie de travail de cet algorithme en C++. Le même algorithme est le moyen le plus rapide d'accéder aux éléments triés.
Pour obtenir la propriété Objet stdClass utiliser l'opérateur ->{'name_property'}, par exemple $a->{'tid'}