1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | // 二维数组排序函数 function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR") { if(!is_array($ArrayData)) { return $ArrayData; } // Get args number. $ArgCount = func_num_args(); // Get keys to sort by and put them to SortRule array. for($I = 1;$I < $ArgCount;$I ++) { $Arg = func_get_arg($I); if(!eregi("SORT",$Arg)) { $KeyNameList[] = $Arg; $SortRule[] = '$'.$Arg; } else { $SortRule[] = $Arg; } } // Get the values according to the keys and put them to array. foreach($ArrayData AS $Key => $Info) { foreach($KeyNameList AS $KeyName) { ${$KeyName}[$Key] = $Info[$KeyName]; } } // Create the eval string and eval it. $EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);'; eval ($EvalString); return $ArrayData; } |
Monthly Archive for November, 2010
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | private function combination($ar, $num) { $control = range(0, $num-1); $k = false; $total = count($ar); while($control[0] < $total-($num-1)) { $t = array(); for($i=0; $i <$num; $i++) $t[] = $ar[$control[$i]]; $r[] = $t; for($i=$num-1; $i>=0; $i--) { $control[$i]++; for($j=$i; $j <$num-1; $j++) $control[$j+1] = $control[$j]+1; if($control[$i] < $total-($num-$i-1)) break; } } return $r; } private function combination($ar, $num) { $control = range(0, $num-1); $k = false; $total = count($ar); while($control[0] < $total-($num-1)) { $t = array(); for($i=0; $i <$num; $i++) $t[] = $ar[$control[$i]]; $r[] = $t; for($i=$num-1; $i>=0; $i--) { $control[$i]++; for($j=$i; $j <$num-1; $j++) $control[$j+1] = $control[$j]+1; if($control[$i] < $total-($num-$i-1)) break; } } return $r; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | // 检测是否为整数 function isInteger( str ){ var regu = /^[-]{0,1}[0-9]{1,}$/; return regu.test(str); } function implode (glue, pieces) { var i = '', retVal='', tGlue=''; if (arguments.length === 1) { pieces = glue; glue = ''; } if (typeof(pieces) === 'object') { if (pieces instanceof Array) { return pieces.join(glue); } else { for (i in pieces) { retVal += tGlue + pieces[i]; tGlue = glue; } return retVal; } } else { return pieces; } } function print_r(x, max, sep, l) { l = l || 0; max = max || 10; sep = sep || ' '; if (l > max) { return "[WARNING: Too much recursion]\n"; } var i, r = '', t = typeof x, tab = ''; if (x === null) { r += "(null)\n"; } else if (t == 'object') { l++; for (i = 0; i < l; i++) { tab += sep; } if (x && x.length) { t = 'array'; } r += '(' + t + ") :\n"; for (i in x) { try { r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1)); } catch(e) { return "[ERROR: " + e + "]\n"; } } } else { if (t == 'string') { if (x == '') { x = '(empty)'; } } r += '(' + t + ') ' + x + "\n"; } return r; }; var_dump = print_r; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | /** * 递归排列 * 从 arr[1...n] 中任选 num(0 < num <= n) 个数的所有排列 */ function recursion_permutate(arr, num) { var r = []; (function f(t, a, n) { if (n == 0) return r.push(t); for (var i = 0, l = a.length; i < l; i++) { f(t.concat(a[i]), a.slice(0, i).concat(a.slice(i + 1)), n - 1); } })([], arr, num); return r; } /** * 递归组合 * 从 arr[1...n] 中任选 num(0 < num <= n) 个数的所有组合 */ function recursion_combine(arr, num) { var r = []; (function f(t, a, n) { if (n == 0) return r.push(t); for (var i = 0, l = a.length; i <= l - n; i++) { f(t.concat(a[i]), a.slice(i + 1), n - 1); } })([], arr, num); return r; } /** * 快速组合 - 字符串 */ function quick_combine(n, m) { var t = ((1 << n) - (1 << n - m)).toString(2), r = [], s, p1, p2; while((r.push(t), p1 = t.indexOf("10")) >= 0) { s = t.slice(0, p1); p2 = s.indexOf("1"); t = (p2 > 0 ? ((1 << p1) - (1 << p2)).toString(2) : s) + "01" + t.slice(p1 + 2); } return r; } /** * 快速组合 - 纯位移 */ function bit_quick_combine(n, m) { var t = (1 << n + 1) - (1 << n - m), // 故意多留一个 1,免得补零 r = [], o, p1, p2; while((o = t.toString(2).slice(1), r.push(o), p1 = o.indexOf("1"), p2 = o.indexOf("10")) >= 0){ t ^= ((p1 ? ((1 << p2) - (1 << p1) ^ (1 << p2 - p1) - 1) << 2 : 0) | 3) << n - p2 - 2; } return r; } /** * 进位法 */ function carry_combine(n, m) { var r = [], t = [], i, p, max; // seed for(i = 0; i < m; i++) t.push(i); r.push(t.concat()); while(p = m - 1, max = n - 1) { // increase while(t[p] < max) { t[p]++; r.push(t.concat()); } // carry while(t[--p] === --max){} t[p]++; for(i = p + 1; i < m; i++) t[i] = t[p] + i - p; r.push(t.concat()); // done if(t[0] === n - m) break; } return r; } /** * 沙漏法 */ function sandglass_combine(n, m) { var p = [], r = [] , i, j; for(i = m - 1, j = 0; i >= 0; i--, j++) { p[j] = n - i - 1; } r.push(p.concat()); //5,4,3 5,4,2 5,4,1 5,4,0->5,3,2 5,3,1 5,3,0->5,2,1 5,2,0->5,1,0->5,0,0->4,3,2... while (p[m - 1] >= m) { if (--p[0] >= 0) { r.push(p.concat()); } else { for (i = 1; i < m; i++) { if (p[i] > i) { p[i]--; for (j = i - 1; j >= 0; j--) { p[j] = p[j + 1] - 1; } r.push(p.concat()); break; } } } } return r; } /** * DP 组合 * @ref: http://bbs.51js.com/viewthread.php?tid=85574 * C(n, m) = C(n - 1, m) + C(n - 1, m - 1) */ function dp_combine(a, m) { var t = [[]], r = []; for (var i = 0, n = a.length; i < n; ++i) { for (var j = 0, l = t.length; j < l; ++j) { (t[j].length < m - 1 ? t : r).push(t[j].concat([a[i]])); } } return r; } |
Recent Comments