|
@@ -1,143 +1,186 @@
|
|
|
<?php
|
|
|
|
|
|
|
|
|
-* This is the array library for Chamilo.
|
|
|
-* Include/require it in your code to use its functionality.
|
|
|
-*
|
|
|
-* @package chamilo.library
|
|
|
-*/
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- * Removes duplicate values from a dimensional array
|
|
|
- *
|
|
|
- * @param array $array dimensional array
|
|
|
- * @return array an array with unique values
|
|
|
+ * This is the array library for Chamilo.
|
|
|
+ * Include/require it in your code to use its functionality.
|
|
|
*
|
|
|
+ * @package chamilo.library
|
|
|
*/
|
|
|
-function array_unique_dimensional($array)
|
|
|
+class ArrayClass
|
|
|
{
|
|
|
- if (!is_array($array)) {
|
|
|
- return $array;
|
|
|
- }
|
|
|
+
|
|
|
+ * Removes duplicate values from a dimensional array
|
|
|
+ *
|
|
|
+ * @param array a dimensional array
|
|
|
+ * @return array an array with unique values
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public static function array_unique_dimensional($array)
|
|
|
+ {
|
|
|
+ if (!is_array($array)) {
|
|
|
+ return $array;
|
|
|
+ }
|
|
|
|
|
|
- foreach ($array as &$myvalue) {
|
|
|
- $myvalue = serialize($myvalue);
|
|
|
- }
|
|
|
+ foreach ($array as &$myvalue) {
|
|
|
+ $myvalue = serialize($myvalue);
|
|
|
+ }
|
|
|
|
|
|
- $array = array_unique($array);
|
|
|
+ $array = array_unique($array);
|
|
|
|
|
|
- foreach ($array as &$myvalue) {
|
|
|
- $myvalue = unserialize($myvalue);
|
|
|
- }
|
|
|
- return $array;
|
|
|
-}
|
|
|
+ foreach ($array as &$myvalue) {
|
|
|
+ $myvalue = unserialize($myvalue);
|
|
|
+ }
|
|
|
|
|
|
-
|
|
|
- *
|
|
|
- * Sort multidimensional arrays
|
|
|
- *
|
|
|
- * @param array unsorted multidimensional array
|
|
|
- * @param string key to be sorted
|
|
|
- * @return array result array
|
|
|
- * @author found in http:
|
|
|
- */
|
|
|
-function msort($array, $id = 'id', $order = 'desc')
|
|
|
-{
|
|
|
- if (empty($array)) {
|
|
|
return $array;
|
|
|
}
|
|
|
- $temp_array = array();
|
|
|
- while (count($array) > 0) {
|
|
|
- $lowest_id = 0;
|
|
|
- $index = 0;
|
|
|
- foreach ($array as $item) {
|
|
|
- if ($order == 'desc') {
|
|
|
- if ($item[$id] < $array[$lowest_id][$id]) {
|
|
|
- $lowest_id = $index;
|
|
|
- }
|
|
|
- } else {
|
|
|
- if ($item[$id] > $array[$lowest_id][$id]) {
|
|
|
- $lowest_id = $index;
|
|
|
+
|
|
|
+
|
|
|
+ *
|
|
|
+ * Sort multidimensional arrays
|
|
|
+ *
|
|
|
+ * @param array unsorted multidimensional array
|
|
|
+ * @param string key to be sorted
|
|
|
+ * @return array result array
|
|
|
+ * @author found in http:
|
|
|
+ */
|
|
|
+ public static function msort($array, $id = 'id', $order = 'desc')
|
|
|
+ {
|
|
|
+ if (empty($array)) {
|
|
|
+ return $array;
|
|
|
+ }
|
|
|
+ $temp_array = array();
|
|
|
+ while (count($array) > 0) {
|
|
|
+ $lowest_id = 0;
|
|
|
+ $index = 0;
|
|
|
+ foreach ($array as $item) {
|
|
|
+ if ($order == 'desc') {
|
|
|
+ if ($item[$id] < $array[$lowest_id][$id]) {
|
|
|
+ $lowest_id = $index;
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ($item[$id] > $array[$lowest_id][$id]) {
|
|
|
+ $lowest_id = $index;
|
|
|
+ }
|
|
|
}
|
|
|
+ $index++;
|
|
|
}
|
|
|
- $index++;
|
|
|
+ $temp_array[] = $array[$lowest_id];
|
|
|
+ $array = array_merge(
|
|
|
+ array_slice($array, 0, $lowest_id),
|
|
|
+ array_slice($array, $lowest_id + 1)
|
|
|
+ );
|
|
|
}
|
|
|
- $temp_array[] = $array[$lowest_id];
|
|
|
- $array = array_merge(
|
|
|
- array_slice($array, 0, $lowest_id),
|
|
|
- array_slice($array, $lowest_id + 1)
|
|
|
- );
|
|
|
+
|
|
|
+ return $temp_array;
|
|
|
}
|
|
|
- return $temp_array;
|
|
|
-}
|
|
|
|
|
|
-function array_walk_recursive_limited(
|
|
|
- &$array,
|
|
|
- $function,
|
|
|
- $apply_to_keys_also = false
|
|
|
-) {
|
|
|
- static $recursive_counter = 0;
|
|
|
- if (++$recursive_counter > 1000) {
|
|
|
- die('possible deep recursion attack');
|
|
|
+
|
|
|
+ * @param $array
|
|
|
+ * @return mixed
|
|
|
+ */
|
|
|
+ public static function utf8_sort($array)
|
|
|
+ {
|
|
|
+ $old_locale = setlocale(LC_ALL, null);
|
|
|
+ $code = api_get_language_isocode();
|
|
|
+ $locale_list = array(
|
|
|
+ $code.'.utf8',
|
|
|
+ 'en.utf8',
|
|
|
+ 'en_US.utf8',
|
|
|
+ 'en_GB.utf8',
|
|
|
+ );
|
|
|
+ $try_sort = false;
|
|
|
+
|
|
|
+ foreach ($locale_list as $locale) {
|
|
|
+ $my_local = setlocale(LC_COLLATE, $locale);
|
|
|
+ if ($my_local) {
|
|
|
+ $try_sort = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if ($try_sort) {
|
|
|
+ uasort($array, 'strcoll');
|
|
|
+ }
|
|
|
+ setlocale(LC_COLLATE, $old_locale);
|
|
|
+
|
|
|
+ return $array;
|
|
|
}
|
|
|
- foreach ($array as $key => $value) {
|
|
|
- if (is_array($value)) {
|
|
|
- array_walk_recursive_limited(
|
|
|
- $array[$key],
|
|
|
- $function,
|
|
|
- $apply_to_keys_also
|
|
|
- );
|
|
|
- } else {
|
|
|
- $array[$key] = $function($value);
|
|
|
+
|
|
|
+
|
|
|
+ * @param $array
|
|
|
+ * @param string $separator
|
|
|
+ * @return string
|
|
|
+ */
|
|
|
+ public static function array_to_string($array, $separator = ',')
|
|
|
+ {
|
|
|
+ if (empty($array)) {
|
|
|
+ return '';
|
|
|
}
|
|
|
- if ($apply_to_keys_also && is_string($key)) {
|
|
|
- $new_key = $function($key);
|
|
|
- if ($new_key != $key) {
|
|
|
- $array[$new_key] = $array[$key];
|
|
|
- unset($array[$key]);
|
|
|
+
|
|
|
+ return implode($separator.' ', $array);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * @param array $array
|
|
|
+ * @return array
|
|
|
+ */
|
|
|
+ public static function array_flatten(array $array)
|
|
|
+ {
|
|
|
+ $flatten = array();
|
|
|
+ array_walk_recursive(
|
|
|
+ $array,
|
|
|
+ function ($value) use (&$flatten) {
|
|
|
+ $flatten[] = $value;
|
|
|
}
|
|
|
- }
|
|
|
+ );
|
|
|
+
|
|
|
+ return $flatten;
|
|
|
}
|
|
|
- $recursive_counter--;
|
|
|
-}
|
|
|
|
|
|
-
|
|
|
- * @param $array
|
|
|
- * @return mixed
|
|
|
- */
|
|
|
-function utf8_sort($array)
|
|
|
-{
|
|
|
- $old_locale = setlocale(LC_ALL, null);
|
|
|
- $code = api_get_language_isocode();
|
|
|
- $locale_list = array($code.'.utf8', 'en.utf8','en_US.utf8','en_GB.utf8');
|
|
|
- $try_sort = false;
|
|
|
-
|
|
|
- foreach($locale_list as $locale) {
|
|
|
- $my_local = setlocale(LC_COLLATE, $locale);
|
|
|
- if ($my_local) {
|
|
|
- $try_sort = true;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if ($try_sort) {
|
|
|
- uasort($array, 'strcoll');
|
|
|
- }
|
|
|
- setlocale(LC_COLLATE, $old_locale);
|
|
|
- return $array;
|
|
|
-}
|
|
|
+
|
|
|
+ * Shuffles an array keeping the associations
|
|
|
+ * @param $array
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ public static function shuffle_assoc(&$array)
|
|
|
+ {
|
|
|
+ $keys = array_keys($array);
|
|
|
+ shuffle($keys);
|
|
|
+ foreach ($keys as $key) {
|
|
|
+ $new[$key] = $array[$key];
|
|
|
+ }
|
|
|
+ $array = $new;
|
|
|
|
|
|
-
|
|
|
- * @param array $array
|
|
|
- * @param string $separator
|
|
|
- * @return string
|
|
|
- */
|
|
|
-function array_to_string($array, $separator = ',')
|
|
|
-{
|
|
|
- if (empty($array)) {
|
|
|
- return '';
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
- return implode($separator.' ', $array);
|
|
|
+ public static function array_walk_recursive_limited(
|
|
|
+ &$array,
|
|
|
+ $function,
|
|
|
+ $apply_to_keys_also = false
|
|
|
+ ) {
|
|
|
+ static $recursive_counter = 0;
|
|
|
+ if (++$recursive_counter > 1000) {
|
|
|
+ die('possible deep recursion attack');
|
|
|
+ }
|
|
|
+ foreach ($array as $key => $value) {
|
|
|
+ if (is_array($value)) {
|
|
|
+ array_walk_recursive_limited(
|
|
|
+ $array[$key],
|
|
|
+ $function,
|
|
|
+ $apply_to_keys_also
|
|
|
+ );
|
|
|
+ } else {
|
|
|
+ $array[$key] = $function($value);
|
|
|
+ }
|
|
|
+ if ($apply_to_keys_also && is_string($key)) {
|
|
|
+ $new_key = $function($key);
|
|
|
+ if ($new_key != $key) {
|
|
|
+ $array[$new_key] = $array[$key];
|
|
|
+ unset($array[$key]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $recursive_counter--;
|
|
|
+ }
|
|
|
}
|