Tag.php 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <?php
  2. namespace Muzich\CoreBundle\lib;
  3. /**
  4. * Boite a outils pour les Tags.
  5. */
  6. class Tag
  7. {
  8. /**
  9. *
  10. * @param array $elements Tableau d'éléments
  11. * @return array Tableau de tags [0 => id_tag, 1 => id_tag] rangé du tag le
  12. * plus utilisé au tag le moins utilisé
  13. */
  14. public function getOrderedTagsWithElements($elements)
  15. {
  16. $tags_count = array();
  17. $tags_ordered = array();
  18. foreach ($elements as $element)
  19. {
  20. foreach ($element->getTags() as $tag)
  21. {
  22. // Si on a déjà un compteur pour ce tag
  23. if (array_key_exists($tag->getId(), $tags_count))
  24. {
  25. // On incrémente
  26. $tags_count[$tag->getId()] = $tags_count[$tag->getId()] + 1;
  27. }
  28. else
  29. {
  30. // On commence le compteur
  31. $tags_count[$tag->getId()] = 1;
  32. }
  33. }
  34. }
  35. // On trie le tableau avec les valeurs décroissantes
  36. // Comme les valeurs sont les count, on aura les tags les plus
  37. // utilisés en haut du tableau
  38. arsort($tags_count);
  39. foreach ($tags_count as $tag_id => $count)
  40. {
  41. $tags_ordered[] = $tag_id;
  42. }
  43. return $tags_ordered;
  44. }
  45. /**
  46. * Range une liste de tags [0 => Tag] en fonction d'une
  47. * réfèrence sous la forme [0 => tag_id, 1 => tag_id]
  48. *
  49. * @param array $tags
  50. * @param array $reference
  51. * @return array
  52. */
  53. public function sortTagWithOrderedReference($tags, $reference)
  54. {
  55. // tableau des tags rangés
  56. $tag_ordered = array();
  57. // tableau des tags pas encore dans la référence
  58. $tag_not_fond = array();
  59. foreach ($tags as $tag)
  60. {
  61. $position = array_search($tag->getId(), $reference);
  62. // Si on l'a trouvé dans la réference
  63. if ($position !== false)
  64. {
  65. // On le met dans le tableau des tags rangé, avec la clé de la réference
  66. $tag_ordered[$position] = $tag;
  67. }
  68. else
  69. {
  70. // Si il n'étais pas dans la réference on le met en attente dans
  71. // ce tableau
  72. $tag_not_fond[] = $tag;
  73. }
  74. }
  75. // Une fois les tags réferencés dans le tableau ordonné, on ajoute ceux qui
  76. // ne l'était pas
  77. foreach ($tag_not_fond as $tag)
  78. {
  79. $tag_ordered[] = $tag;
  80. }
  81. // On trie le tableau en fonction des clés.
  82. ksort($tag_ordered);
  83. return $tag_ordered;
  84. }
  85. }