array.lib.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This is the array library for Chamilo.
  5. * Include/require it in your code to use its functionality.
  6. *
  7. * @package chamilo.library
  8. */
  9. /**
  10. * Removes duplicate values from a dimensional array
  11. *
  12. * @param array a dimensional array
  13. * @return array an array with unique values
  14. *
  15. */
  16. function array_unique_dimensional($array) {
  17. if(!is_array($array))
  18. return $array;
  19. foreach ($array as &$myvalue) {
  20. $myvalue=serialize($myvalue);
  21. }
  22. $array=array_unique($array);
  23. foreach ($array as &$myvalue) {
  24. $myvalue=unserialize($myvalue);
  25. }
  26. return $array;
  27. }
  28. /**
  29. *
  30. * Sort multidimensional arrays
  31. *
  32. * @param array unsorted multidimensional array
  33. * @param string key to be sorted
  34. * @return array result array
  35. * @author found in http://php.net/manual/en/function.sort.php
  36. */
  37. function msort($array, $id='id', $order = 'desc') {
  38. if (empty($array)) {
  39. return $array;
  40. }
  41. $temp_array = array();
  42. while (count($array)>0) {
  43. $lowest_id = 0;
  44. $index=0;
  45. foreach ($array as $item) {
  46. if ($order == 'desc') {
  47. if ($item[$id]<$array[$lowest_id][$id]) {
  48. $lowest_id = $index;
  49. }
  50. } else {
  51. if ($item[$id]>$array[$lowest_id][$id]) {
  52. $lowest_id = $index;
  53. }
  54. }
  55. $index++;
  56. }
  57. $temp_array[] = $array[$lowest_id];
  58. $array = array_merge(array_slice($array, 0, $lowest_id), array_slice($array, $lowest_id+1));
  59. }
  60. return $temp_array;
  61. }
  62. function array_walk_recursive_limited(&$array, $function, $apply_to_keys_also = false) {
  63. static $recursive_counter = 0;
  64. if (++$recursive_counter > 1000) {
  65. die('possible deep recursion attack');
  66. }
  67. foreach ($array as $key => $value) {
  68. if (is_array($value)) {
  69. array_walk_recursive_limited($array[$key], $function, $apply_to_keys_also);
  70. } else {
  71. $array[$key] = $function($value);
  72. }
  73. if ($apply_to_keys_also && is_string($key)) {
  74. $new_key = $function($key);
  75. if ($new_key != $key) {
  76. $array[$new_key] = $array[$key];
  77. unset($array[$key]);
  78. }
  79. }
  80. }
  81. $recursive_counter--;
  82. }
  83. function utf8_sort($array) {
  84. $old_locale = setlocale(LC_ALL, null);
  85. $code = api_get_language_isocode();
  86. $locale_list = array($code.'.utf8', 'en.utf8','en_US.utf8','en_GB.utf8');
  87. $try_sort = false;
  88. foreach($locale_list as $locale) {
  89. $my_local = setlocale(LC_COLLATE, $locale);
  90. if ($my_local) {
  91. $try_sort = true;
  92. break;
  93. }
  94. }
  95. if ($try_sort) {
  96. uasort($array, 'strcoll');
  97. }
  98. setlocale(LC_COLLATE, $old_locale);
  99. return $array;
  100. }