【PHP常见问题001】

1、扫描一个文件夹下的所有文件夹和文件

<?php

function my_scandir($dir)
{
    $files = array();
    if (is_dir($dir)) {
        if ($handle = opendir($dir)) {
            while (($file = readdir($handle)) !== false) {
                if ($file != "." && $file != "..") {
                    if (is_dir($dir . '/' . $file)) {
                        $files[$file] = my_scandir($dir . '/' . $file);
                    } else {
                        $files[] = $dir . '/' . $file;
                    }
                }
            }
            closedir($handle);
            return $files;
        }
    }
}

$dir = 'D:/wwwroot/test/alipay';
var_dump(my_scandir($dir));
View Code

2、删除非空文件夹

<?php

function del_dir($path)
{
    $res = @opendir($path);
    if (!$res) {
        echo '文件或文件夹不存在';
        exit();
    }
    while ($file = readdir($res)) {
        if ($file != '.' && $file != '..') {
            $fullpath = $path . '/' . $file;
            if (!is_dir($fullpath)) {
                unlink($fullpath);
            } else {
                del_dir($fullpath);
            }
        }
    }
}

$dir = 'D:/wwwroot/test/alipay';
if (del_dir($dir)) {
    echo "删除成功!";
} else {
    echo "删除失败!";
}
View Code

3、无限极分类

//无限极函数
function treelist($data, $cid, $deep = 1)
{
    static $tree = array();
    foreach ($data as $row) {
        if ($row ['cid'] == $cid) {
            $row ['lever'] = $deep;
            $tree [] = $row;
            $this->treelist($data, $row ['id'], $deep + 1);
        }
    }
    return $tree;
}
View Code

4、创建多级目录 PHP函数

/**
 * 创建多级目录
 * @param $path 要创建的目录
 * @param int $mode 创建目录的模式,在windows下忽略
 */
function create_dir($path, $mode = 0777)
{
    if (is_dir($path)) {
        echo '该目录已经存在';
    } else {
        if (mkdir($path, $mode, true)) {
            echo '创建目录成功';
        } else {
            echo '创建目录失败';
        }
    }
}
View Code

5、确保多个进程同时写入同一个文件成功

$fp = fopen("lock.txt", "w+");
if (flock($fp, LOCK_EX)) {
    //获得写锁,写数据
    fwrite($fp, "write something");
    //解除锁定
    flock($fp, LOCK_UN);
} else {
    echo "file is locking...";
}
fclose($fp);
View Code

6、从一个标准的url里取出文件的拓展名

//例如:http://www.baidu.com/abc/de/f.html?id=1
function getExt($url)
{
    $arr = parse_url($url);
    $file = basename($arr['path']);
    $ext = explode('.', $file);
    return $ext[count($ext) - 1];
}

$url = "http://www.baidu.com/abc/de/f.html?id=1";
var_dump(getExt($url));
View Code

7、php 把数字1-1亿换成汉字表述,例如 150 转成 一百五十

function numToString($num)
{
    $chineseNum = array('零', '一', '二', '三', '四', '五', '六', '七', '八', '九');
    $chinesePos = array('', '十', '百', '千', '万', '十', '百', '千', '亿');
    $uniPro = array(4, 8);

    if (!is_numeric($num)) return false;    //非数字返回false

    $numStr = (string)$num;    //待转换的数字字符串

    $count = strlen($numStr);   //字符串的长度
    $last_flag = true;  //上一个是否为0
    $zero_flag = true;  //是否第一个
    $tmp_num = null;    //临时数字
    $uni_index = 0;

    $chineseStr = '';   //待拼接的字符串,返回的结果

    if ($count == 1) {  //1位数
        $chineseStr = $chineseNum[$numStr[0]];
    } elseif ($count == 2) {    //2位数
        $tmp_num = $numStr[0];  //十位的数字
        $chineseStr = $tmp_num == 1 ? $chinesePos[1] : $chineseNum[$tmp_num] . $chinesePos[1];
        $tmp_num = $numStr[1];  //个位的数字
        $chineseStr .= $tmp_num == 0 ? '' : $chineseNum[$tmp_num];
    } else {    //大于2位数字
        $index = 0;
        for ($i = $count - 1; $i >= 0; $i--) {
            $tmp_num = $numStr[$i];
            if ($tmp_num == 0) {
                $uni_index = $index % 8;
                if (in_array($uni_index, $uniPro)) {
                    $chineseStr = $chinesePos[$uni_index] . $chineseStr;
                    $last_flag = true;
                } else if (!$zero_flag && !$last_flag) {
                    $chineseStr = $chineseNum[$tmp_num] . $chineseStr;
                    $last_flag = true;
                }
            } else {
                $chineseStr = $chineseNum[$tmp_num] . $chinesePos[$index % 9] . $chineseStr;

                $last_flag = false;
                $zero_flag = false;
            }
            $index++;
        }
    }

    return $chineseStr;
}

var_dump(numToString(102305670));   //string(42) "一亿零二百三十万五千六百七十"
View Code

 

posted on 2015-07-06 18:19  gimin  阅读(158)  评论(0)    收藏  举报