没事写的一些小示例

由于是用来测试的, 可能有些会用php7的语法来写, 不过未来的主流肯定是php7, 就像现在的主流是5.6一样, PHP7 的性能无疑是超越了5.6一大截。

练习的时候我们可以使用php内置的http服务器,来减少部署的时间, 将php7加入到环境变量中, 在需要执行的目录中运行php -S 127.0.0.1:80

字符串类

/**
 * 翻转字符串
 * @param string $str
 * @return string
 * @throws Exception
 */
function reverse(string  $str) :string {
    if (!function_exists('mb_strlen')){
        throw  new Exception('mbstring module not found.');
    }

    $reject = [];
    for ( $len = mb_strlen($str); $len >= 0; --$len ){
        $reject[] = mb_substr($str, $len, 1, 'utf8');
    }

    return implode($reject);
}

/**
 * 解析url请求的文件类型
 * @param string $url
 * @return string
 */
function getExt(string $url) :string {
    $path = parse_url($url)['path'];
    return pathinfo($path)['extension'];
}

文件相关

/**
 * 使用generate 遍历路径下的所有文件(生成器)
 * @param $dirpath
 * @return Generator
 */
function listall (string $dirpath) {
    $obj = new DirectoryIterator($dirpath);
    foreach ($obj as $file) {
        if ($file->isDot()) continue;
        if ($file->isDir()) {
            foreach (listall($file->getRealPath()) as $item)
                yield $item;
        }

        yield $file;
    }
}

foreach (listall('./') as $item)
{
    echo $item->getRealPath() . PHP_EOL;
}

数学计算

/**
 * 对一个数进行因式分解, 返回分解后的数组
 * @param int $num
 * @return array
 */
function factorization(int $num) {
    $num = abs($num);
    $res = [];
    $i = 2;
    while (true){
        if ($num%$i == 0){
            $num /= $i;
            $res[] = $i;
        }elseif($i<$num){
            $i++;
        }else{break;}
    }
    return $res;
}
/**
 * 求两个数的最大公约数
 * @param int $a
 * @param int $b
 * @return int
 */
function max_divisor2(int $a, int $b)
{
    if($b==0) return $a;
    return max_divisor2($b,($a%$b));
}
/**
 * 求任意多个数的最大公约数
 * @return int
 */
function max_divisors(){
    $args = func_get_args();
    rsort($args);
    $a = array_pop($args);
    $b = array_pop($args);
    $max = max_divisor2($a, $b);
    foreach ($args as $num){
        $max = max_divisor2($max, $num);
    }

    return $max;
}