00001 <?php
00003
00004
00005
00006
00007
00008
00010
00026 function array_remove_empty(& $arr, $trim = true)
00027 {
00028 foreach ($arr as $key => $value) {
00029 if (is_array($value)) {
00030 array_remove_empty($arr[$key]);
00031 } else {
00032 $value = trim($value);
00033 if ($value == '') {
00034 unset($arr[$key]);
00035 } elseif ($trim) {
00036 $arr[$key] = $value;
00037 }
00038 }
00039 }
00040 }
00041
00050 function array_col_values(& $arr, $col)
00051 {
00052 $ret = array();
00053 foreach ($arr as $row) {
00054 if (isset($row[$col])) { $ret[] = $row[$col]; }
00055 }
00056 return $ret;
00057 }
00058
00070 function array_to_hashmap(& $arr, $keyField, $valueField = null)
00071 {
00072 $ret = array();
00073 if ($valueField) {
00074 foreach ($arr as $row) {
00075 $ret[$row[$keyField]] = $row[$valueField];
00076 }
00077 } else {
00078 foreach ($arr as $row) {
00079 $ret[$row[$keyField]] = $row;
00080 }
00081 }
00082 return $ret;
00083 }
00084
00093 function array_group_by(& $arr, $keyField)
00094 {
00095 $ret = array();
00096 foreach ($arr as $row) {
00097 $key = $row[$keyField];
00098 $ret[$key][] = $row;
00099 }
00100 return $ret;
00101 }
00102
00117 function array_to_tree($arr, $fid, $fparent = 'parent_id',
00118 $fchildrens = 'childrens', $returnReferences = false)
00119 {
00120 $pkvRefs = array();
00121 foreach ($arr as $offset => $row) {
00122 $pkvRefs[$row[$fid]] =& $arr[$offset];
00123 }
00124
00125 $tree = array();
00126 foreach ($arr as $offset => $row) {
00127 $parentId = $row[$fparent];
00128 if ($parentId) {
00129 if (!isset($pkvRefs[$parentId])) { continue; }
00130 $parent =& $pkvRefs[$parentId];
00131 $parent[$fchildrens][] =& $arr[$offset];
00132 } else {
00133 $tree[] =& $arr[$offset];
00134 }
00135 }
00136 if ($returnReferences) {
00137 return array('tree' => $tree, 'refs' => $pkvRefs);
00138 } else {
00139 return $tree;
00140 }
00141 }
00142
00151 function tree_to_array(& $node, $fchildrens = 'childrens')
00152 {
00153 $ret = array();
00154 if (isset($node[$fchildrens]) && is_array($node[$fchildrens])) {
00155 foreach ($node[$fchildrens] as $child) {
00156 $ret = array_merge($ret, tree_to_array($child, $fchildrens));
00157 }
00158 unset($node[$fchildrens]);
00159 $ret[] = $node;
00160 } else {
00161 $ret[] = $node;
00162 }
00163 return $ret;
00164 }
00165
00175 function array_column_sort($array, $keyname, $sortDirection = SORT_ASC)
00176 {
00177 return array_sortby_multifields($array, array($keyname => $sortDirection));
00178 }
00179
00186 function array_sortby_multifields($rowset, $args)
00187 {
00188 $sortArray = array();
00189 $sortRule = '';
00190 foreach ($args as $sortField => $sortDir) {
00191 foreach ($rowset as $offset => $row) {
00192 $sortArray[$sortField][$offset] = $row[$sortField];
00193 }
00194 $sortRule .= '$sortArray[\'' . $sortField . '\'], ' . $sortDir . ', ';
00195 }
00196 if (empty($sortArray) || empty($sortRule)) { return $rowset; }
00197 eval('array_multisort(' . $sortRule . '$rowset);');
00198 return $rowset;
00199 }