22 public static function sortByColumn(array &$array, $columns, $callbacks =
'', $defaultValueIfNotSetValue =
null, $preserveKeys =
false)
25 if (!is_array($columns))
27 $columns = array($columns => SORT_ASC);
29 $params = $preserveDataKeys = array();
30 $alreadyFillPreserveDataKeys =
false;
31 foreach ($columns as $column => &$order)
35 if(is_array($callbacks) && !is_callable($callbacks))
38 if(!empty($callbacks[$column]))
40 $callback = is_callable($callbacks[$column])? $callbacks[$column] :
false;
44 elseif(!empty($callbacks))
46 $callback = is_callable($callbacks)? $callbacks :
false;
49 if($callback ===
false)
51 throw new \Bitrix\Main\ArgumentOutOfRangeException(
'callbacks');
55 $valueColumn[$column] = array();
56 foreach ($array as $index => $row)
58 $value = isset($row[$column]) ? $row[$column] : $defaultValueIfNotSetValue;
61 $value = call_user_func_array($callback, array($value));
63 $valueColumn[$column][$index] = $value;
64 if($preserveKeys && !$alreadyFillPreserveDataKeys)
66 $preserveDataKeys[$index] = $index;
70 $alreadyFillPreserveDataKeys = $preserveKeys && !empty($preserveDataKeys);
72 $params[] = &$valueColumn[$column];
73 $order = (array)$order;
74 foreach ($order as $i => $ord)
76 $params[] = &$columns[$column][$i];
79 unset($order, $column);
83 $params[] = &$preserveDataKeys;
86 call_user_func_array(
'array_multisort', $params);
90 $array = array_combine(array_values($preserveDataKeys), array_values($array));
108 $argCount = func_num_args();
109 for ($i = 0; $i < $argCount; $i += 2)
111 $anArray = func_get_arg($i);
112 $key = func_get_arg($i+1);
115 $current = &$anArray;
119 if (!is_array($current) || !array_key_exists($k, $current))
124 $current = &$current[$k];
128 if (is_array($current) || is_object($current) || $current !=
"")
132 elseif (is_array($anArray) && array_key_exists($key, $anArray))
134 if (is_array($anArray[$key]) || is_object($anArray[$key]) || $anArray[$key] !=
"")
135 return $anArray[$key];
150 if (empty($map) || !is_array($map))
154 foreach ($map as $value)
156 $value = (int)$value;
158 $result[$value] =
true;
163 $map = array_keys($result);
177 $array = array_keys($array);
179 return ($array !== array_keys($array));
189 public static function clone(array $originalArray): array
192 foreach ($originalArray as $index => $value)
194 if (is_array($value))
196 $value = static::clone($value);
198 elseif (is_object($value))
200 $value =
clone $value;
203 $clonedArray[$index] = $value;
static normalizeArrayValuesByInt(&$map, $sorted=true)
static isAssociative(array $array)
static clone(array $originalArray)
static sortByColumn(array &$array, $columns, $callbacks='', $defaultValueIfNotSetValue=null, $preserveKeys=false)