1. 获取HTTP请求头内容

  1. <?
  2. $headers = [];
  3. foreach ($_SERVER as $name => $value) {
  4. if (substr($name, 0, 5) == 'HTTP_') {
  5. $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value;
  6. }
  7. }

2. 递归打印目录

  1. <?
  2. function dr($path, $lev = 0) {
  3. $filename = pathinfo($path, PATHINFO_BASENAME);
  4. if (is_dir($path)) {
  5. echo str_repeat('----', $lev) . '[' . $filename . ']' . "\n";
  6. $r = scandir($path);
  7. $lev++;
  8. foreach ($r as $v) {
  9. if (in_array($v, ['.', '..'])) {
  10. continue;
  11. }
  12. $this->dr($path . '\\' . $v, $lev);
  13. }
  14. } else {
  15. echo str_repeat('----', $lev) . $filename . "\n";
  16. }
  17. }

3. 两地经纬度距离

image.png

<?
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;
}