1. 获取HTTP请求头内容
<?$headers = [];foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; }}
2. 递归打印目录
<?function dr($path, $lev = 0) { $filename = pathinfo($path, PATHINFO_BASENAME); if (is_dir($path)) { echo str_repeat('----', $lev) . '[' . $filename . ']' . "\n"; $r = scandir($path); $lev++; foreach ($r as $v) { if (in_array($v, ['.', '..'])) { continue; } $this->dr($path . '\\' . $v, $lev); } } else { echo str_repeat('----', $lev) . $filename . "\n"; }}
3. 两地经纬度距离

<?
function getDistance($longitude1, $latitude1,
$longitude2, $latitude2,
$unit=2, $decimal=2) {
$EARTH_RADIUS = 6370.996; // 地球半径系数
$PI = 3.1415926;
$radLat1 = $latitude1 * $PI / 180.0;
$radLat2 = $latitude2 * $PI / 180.0;
$radLng1 = $longitude1 * $PI / 180.0;
$radLng2 = $longitude2 * $PI /180.0;
$a = $radLat1 - $radLat2;
$b = $radLng1 - $radLng2;
$distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
$distance = $distance * $EARTH_RADIUS * 1000;
if($unit==2){
$distance = $distance / 1000;
}
return round($distance, $decimal);
}
4. 无限极分类
<?
function getTree(&$arr, $pid = 0, $lev = 0) {
global $ret;
foreach ($arr as $value) {
if ($value['pid'] == $pid) {
// 删除数组已经格式化的元素
unset($arr[$k]);
// 记录当前元素级别
$value['lev'] = $lev++;
$ret[] = $value;
// 递归
$this->getTree($arr, $value['id'], $lev);
}
}
return $ret;
}
$arr = [
['id'=>1, 'pid'=>0, 'name'=>'亚洲'],
['id'=>2, 'pid'=>0, 'name'=>'北美洲'],
['id'=>3, 'pid'=>1, 'name'=>'中国'],
['id'=>4, 'pid'=>2, 'name'=>'美国'],
['id'=>5, 'pid'=>3, 'name'=>'北京'],
['id'=>6, 'pid'=>3, 'name'=>'河北'],
['id'=>7, 'pid'=>5, 'name'=>'东城区'],
['id'=>8, 'pid'=>5, 'name'=>'海淀区'],
['id'=>9, 'pid'=>2, 'name'=>'加拿大'],
['id'=>10, 'pid'=>3, 'name'=>'广东'],
];
$tree = getTree($arr);
5. 冒泡算法
<?
function asc($arr) {
$c = count($arr);
for ($i = 0; $i < $c-1; $i++) {
for ($j = $i + 1; $j < $c; $j++) {
if ($arr[$i] > $arr[$j]) {
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}
$arr = array(9,5,8,3,1,7,4,6,2);
$r = asc($arr);
//
9,5,8,3,1,7,4,6,2
5,9,8,3,1,7,4,6,2
3,9,8,5,1,7,4,6,2
1,9,8,5,3,7,4,6,2
1,8,9,5,3,7,4,6,2
1,5,9,8,3,7,4,6,2
1,3,9,8,5,7,4,6,2
1,2,9,8,5,7,4,6,3
1,2,8,9,5,7,4,6,3
1,2,5,9,8,7,4,6,3
1,2,4,9,8,7,5,6,3
1,2,3,9,8,7,5,6,4
1,2,3,8,9,7,5,6,4
1,2,3,7,9,8,5,6,4
1,2,3,5,9,8,7,6,4
1,2,3,4,9,8,7,6,5
1,2,3,4,8,9,7,6,5
1,2,3,4,7,9,8,6,5
1,2,3,4,6,9,8,7,5
1,2,3,4,5,9,8,7,6
1,2,3,4,5,8,9,7,6
1,2,3,4,5,7,9,8,6
1,2,3,4,5,6,9,8,7
1,2,3,4,5,6,8,9,7
1,2,3,4,5,6,7,9,8
1,2,3,4,5,6,7,8,9
6. 字符串中取出最长无重复字符串
<?
$check = 'pwwekwwwww';
$fun = function (string $check) {
if (!$len = strlen($check)) {
return false;
}
$longest = $nowStr = $check[0];
for ($i = 1; $i < $len; $i++) {
$ele = $check[$i];
if (strpos($nowStr, $ele)!==false) {
$nowStr = $ele;
continue;
}
$nowStr = $nowStr . $ele;
if (strlen($nowStr) > strlen($longest)) {
$longest = $nowStr;
}
}
return $longest;
};
$longest = $fun($check);
echo $longest;
7. 生成excel列名
<?
function createColumnIndex($num) {
$num = intval($num);
$letterArr = range('A','Z');
if ($num <= count($letterArr)) {
return $letterArr;
}
$ret = [];
for ($i = 1; $i <= $num; $i++) {
$tmp = $i;
$letter = '';
do {
$key = ($tmp - 1) % 26;
$letter = $letterArr[$key] . $letter;
$tmp = floor(($tmp - $key) / 26);
} while ($tmp > 0);
$ret[] = $letter;
}
return $ret;
}
8. 获取变量名称
<?
function get_variable_name(&$var, $scope = null)
{
$scope = ($scope === null) ? $GLOBALS : $scope;
$name = false;
$rawValue = $var;
$var = time() . 'tmp_value_' . mt_rand();
foreach ($scope as $k => $v) {
if ($v === $var) {
$name = $k;
}
}
$var = $rawValue;
return $name;
}