quarta-feira, 27 de junho de 2012

Ordenando array de objetos pelo atributo no php

Olá meus amigos e amigas tudo bem? Hoje vou ser breve.

Se vc precisou ordernar um array de objetos pelo atributo aqui esta a solução.
Não importa se o atributo é privado ok? Vamos utilizar o usort do php que recebe como parametro o array e um callback que é nossa função capaz de ordenar esse cara.

  1. <?php
  2. /* Funcao que ira ordenar */
  3. function verificador($obj1, $obj2) {
  4.     if ($obj1->getOrdem() < $obj2->getOrdem()) {
  5.         return -1;
  6.     } elseif ($obj1->getOrdem() > $obj2->getOrdem()) {
  7.         return +1;
  8.     }
  9.     return 0;
  10. }
  11. /* Classe de exemplo */
  12. class Pessoa{
  13.    
  14.     private $idade;
  15.     private $ordem;
  16.    
  17.     public function getIdade() {
  18.         return $this->idade;
  19.     }
  20.     public function setIdade($idade) {
  21.         $this->idade = $idade;
  22.     }
  23.     public function getOrdem() {
  24.         return $this->ordem;
  25.     }
  26.     public function setOrdem($ordem) {
  27.         $this->ordem = $ordem;
  28.     }
  29. }
  30. /* O array que vamos colocar os objetos*/
  31. $array_objetos = array();
  32. /* 6 objetos pessoa com atributos aleatorios */
  33. for($i = 0; $i < 6; $i++):
  34.     $objeto = new Pessoa();
  35.     $objeto->setIdade(rand(20, 60));
  36.     $objeto->setOrdem(rand(0,30));
  37.    
  38.     $array_objetos[] = $objeto;
  39. endfor;
  40. /* Mostrando o array de objetos criado */
  41. echo "<h1>Array de objetos desordenados</h1><br>";
  42. var_dump($array_objetos);
  43. echo "<br><hr><br>";
  44. /* Usando o usort */
  45. usort($array_objetos, 'verificador');
  46. /* Mostrando o array de objetos criado */
  47. echo "<h1>Array de objetos ORDENADOS pelo atributo ordem</h1><br>";
  48. var_dump($array_objetos);
  49. echo "<br><hr><br>";
  50. ?>

Bem, espero ter ajudado... hehehe

4 comentários: