Bitrix-D7 22.6
 
Загрузка...
Поиск...
Не найдено
collection.php
1<?php
3
5{
22 public static function sortByColumn(array &$array, $columns, $callbacks = '', $defaultValueIfNotSetValue = null, $preserveKeys = false)
23 {
24 //by default: sort by ASC
25 if (!is_array($columns))
26 {
27 $columns = array($columns => SORT_ASC);
28 }
29 $params = $preserveDataKeys = array();
30 $alreadyFillPreserveDataKeys = false;
31 foreach ($columns as $column => &$order)
32 {
33 $callback = null;
34 //this is an array of callbacks (callable string)
35 if(is_array($callbacks) && !is_callable($callbacks))
36 {
37 //if callback set for column
38 if(!empty($callbacks[$column]))
39 {
40 $callback = is_callable($callbacks[$column])? $callbacks[$column] : false;
41 }
42 }
43 //common callback
44 elseif(!empty($callbacks))
45 {
46 $callback = is_callable($callbacks)? $callbacks : false;
47 }
48
49 if($callback === false)
50 {
51 throw new \Bitrix\Main\ArgumentOutOfRangeException('callbacks');
52 }
53
54 //this is similar to the index|slice
55 $valueColumn[$column] = array();
56 foreach ($array as $index => $row)
57 {
58 $value = isset($row[$column]) ? $row[$column] : $defaultValueIfNotSetValue;
59 if ($callback)
60 {
61 $value = call_user_func_array($callback, array($value));
62 }
63 $valueColumn[$column][$index] = $value;
64 if($preserveKeys && !$alreadyFillPreserveDataKeys)
65 {
66 $preserveDataKeys[$index] = $index;
67 }
68 }
69 unset($row, $index);
70 $alreadyFillPreserveDataKeys = $preserveKeys && !empty($preserveDataKeys);
71 //bug in 5.3 call_user_func_array
72 $params[] = &$valueColumn[$column];
73 $order = (array)$order;
74 foreach ($order as $i => $ord)
75 {
76 $params[] = &$columns[$column][$i];
77 }
78 }
79 unset($order, $column);
80 $params[] = &$array;
81 if($preserveKeys)
82 {
83 $params[] = &$preserveDataKeys;
84 }
85
86 call_user_func_array('array_multisort', $params);
87
88 if($preserveKeys)
89 {
90 $array = array_combine(array_values($preserveDataKeys), array_values($array));
91 }
92 }
93
106 public static function firstNotEmpty()
107 {
108 $argCount = func_num_args();
109 for ($i = 0; $i < $argCount; $i += 2)
110 {
111 $anArray = func_get_arg($i);
112 $key = func_get_arg($i+1);
113 if (is_array($key))
114 {
115 $current = &$anArray;
116 $found = true;
117 foreach ($key as $k)
118 {
119 if (!is_array($current) || !array_key_exists($k, $current))
120 {
121 $found = false;
122 break;
123 }
124 $current = &$current[$k];
125 }
126 if ($found)
127 {
128 if (is_array($current) || is_object($current) || $current != "")
129 return $current;
130 }
131 }
132 elseif (is_array($anArray) && array_key_exists($key, $anArray))
133 {
134 if (is_array($anArray[$key]) || is_object($anArray[$key]) || $anArray[$key] != "")
135 return $anArray[$key];
136 }
137 }
138 return "";
139 }
140
148 public static function normalizeArrayValuesByInt(&$map, $sorted = true)
149 {
150 if (empty($map) || !is_array($map))
151 return;
152
153 $result = array();
154 foreach ($map as $value)
155 {
156 $value = (int)$value;
157 if (0 < $value)
158 $result[$value] = true;
159 }
160 $map = array();
161 if (!empty($result))
162 {
163 $map = array_keys($result);
164 if ($sorted)
165 sort($map);
166 }
167 }
168
175 public static function isAssociative(array $array)
176 {
177 $array = array_keys($array);
178
179 return ($array !== array_keys($array));
180 }
181
189 public static function clone(array $originalArray): array
190 {
191 $clonedArray = [];
192 foreach ($originalArray as $index => $value)
193 {
194 if (is_array($value))
195 {
196 $value = static::clone($value);
197 }
198 elseif (is_object($value))
199 {
200 $value = clone $value;
201 }
202
203 $clonedArray[$index] = $value;
204 }
205
206 return $clonedArray;
207 }
208}
static normalizeArrayValuesByInt(&$map, $sorted=true)
Definition: collection.php:148
static isAssociative(array $array)
Definition: collection.php:175
static clone(array $originalArray)
Definition: collection.php:189
static sortByColumn(array &$array, $columns, $callbacks='', $defaultValueIfNotSetValue=null, $preserveKeys=false)
Definition: collection.php:22