php使用函數--舉例

1. 創建多級目錄

1.使用遞歸的思想
function mkdirs_2($path){
    if(!is_dir($path)){
        mkdirs_2(dirname($path));
        if(!mkdir($path, 0777)){
            return false;
        }
    }
    return true;
}
$path2 = 'sdfs/sds/sds/s/s/sss';
var_dump(mkdirs_2($path2));     //true;

1.思想主要是利用了遞歸, 先創建dir, 在創建dir/css ,在創建….
2.遞歸就是入棧的過程, 所以先讓,dir/css/js/php/ok 先入棧, 則它會最後出棧…其它的就不說了.
3.dirname(path) path中除了最後一個目錄的值, 即第一次返回是: dir/css/js/php,,,第二次返回 dir/css/js,,,最後一次是 ./

2.直接利用mkdir()創建, 第三個參數必須是true才能自動創建多級目錄
function mkdirs_1($path, $mode = 0777){
    if(is_dir($path)){
        return '無法創建,已經是目錄了';
    }else{
        if(mkdir($path, $mode, true)) {
            return '創建成功';
        }else{
            return '創建失敗';
        }
    }
}
$path1 = 'a/b/c/d/e';
var_dump(mkdirs_1($path1));  //string '創建成功' (length=12)

2. 刪除目錄下的所有文件和目錄

<?php
/**
 * 遞歸實現刪除目錄下的所有的文件和文件夾
 * @param $dir 要刪除的目錄
 * @param bool $deleteRootToo 是否刪除根目錄 默認不刪除
 */
function unlinkRecursive($dir, $deleteRootToo = false)
{
    if(!$dh = @opendir($dir))
    {
        return;
    }
    while (false !== ($obj = readdir($dh)))
    {
        if($obj == '.' || $obj == '..')
        {
            continue;
        }
        if (!@unlink($dir . '/' . $obj))//刪除文件, 如果是目錄則返回false
        {
            unlinkRecursive($dir.'/'.$obj, true);
        }
    }
    closedir($dh);
    if ($deleteRootToo)
    {
        @rmdir($dir);//刪除目錄
    }
    return;
}
unlinkRecursive('dir');
?>

unlink(): 刪除文件
rmdir(): 刪除目錄

3.遍歷目錄下的所有的文件

<?php
//遍歷目錄下的所有的文件 -- 遞歸調用
function get_all_file1($path){
    if($path != '.' && $path != '..' && is_dir($path)){     //判斷是否是目錄,並且不是. 和..
        $files = [];                                        //存儲文件信息
        if($handle = opendir($path)){                       //打開
            while($file = readdir($handle)){                //讀取
                if($file != '.' && $file != '..'){
                    $file_name = ($path . DIRECTORY_SEPARATOR . $file);
                    if(is_dir($file_name)){                 //判斷是否是目錄
                        $files[$file] = get_all_file1($file_name);      //遞歸
                    }else{
                        $files[] = $file_name;
                    }
                }
            }
        }
    }
    closedir($handle);                                          //關閉句柄
    return $files;
}
var_dump(get_all_file1('F:\Apache\www\temp\php_demo'));
?>

4.計算兩個文件的相對路徑

<?php
//計算出兩個文件的相對路徑即path2相對於$path1的相對路徑
function get_relative_path($path1,$path2){
    $arr1 = explode(DIRECTORY_SEPARATOR,dirname($path1));
    $arr2 = explode(DIRECTORY_SEPARATOR,dirname($path2));
    $length = count($arr2);
    for($i = 0; $i < $length; $i++){
        if($arr1[$i] != $arr2[$i]){ //進行路徑匹配
            break;
        }
    }
    if($i == 0){                    //根目錄不同
        return '不在同一個目錄中';
    }else if($i != 0 && $i < $length){        //在同一個個目錄下
        $separator = array_fill(0, ($length-$i), '..');
        return(implode(DIRECTORY_SEPARATOR, array_merge($separator, array_slice($arr1, $i))));
    }else if($i == $length){                //路徑完全相同
        return '.';
    }
}
$path1 = 'F:\Apache\www\temp\php_demo\demo.md'; //參照路徑path1
$path2 = 'F:\Apache\www\temp\php_demo\demo.md';
$path3 = 'F:\Apache\www\temp\sd\ss.d\sdsfd';
$path4 = 'G:\FFOutput';
var_dump(get_relative_path($path1,$path2));
var_dump(get_relative_path($path1,$path3));
var_dump(get_relative_path($path1,$path4));
?>

5.php打印前一天的時間

<?php
//php打印前一天的時間
echo date("Y-m-d H:i:s", strtotime("-1 day"));  //2015-08-04 07:59:19
?>

6.截取中文字符串

<?php
//截取中文字符串
//1.使用正則 preg_split()--返回一維數組
function substr_utf8_1($str, $start, $length){
    return implode('', array_slice(preg_split('//us', $str, -1, PREG_SPLIT_NO_EMPTY), $start, $length));
}
$str = '你好中國 hello word';
var_dump(substr_utf8_1($str, 1, 3));            //string(9) "好中國"

//2. 使用mbstring模塊
var_dump(mb_substr($str, 1, 3, 'utf-8'));       //string(9) "好中國"

//3. 使用正則 split_match_all()--返回二維數組
function substr_utf8_2($arr, $start, $length){
    preg_match_all('/./us', $arr, $ar);
    var_dump(join('', array_slice($ar[0], $start, $length)));
}
substr_utf8_2($str, 1,3 );                      //string(9) "好中國"
?>

7.獲取中文字符串的長度

<?php
//獲取中文字符串的長度
// 1. 使用 mb_strlen()函數
$str = '你好中國 hello word';
var_dump(mb_strlen($str, 'utf-8'));             //int(15)
// 2. 使用 正則 preg_match_all() 將字符轉化爲二維數組, 然後統計二維數組的長度
preg_match_all('/./us', $str, $ar);
var_dump(count($ar[0]));                        //int(15)

//3. 使用 preg_split() 轉爲一維數組, 統計數組的長度
var_dump(count(preg_split('//us', $str,-1, PREG_SPLIT_NO_EMPTY)));      //int(15)
?>

8.翻轉中文字符串

<?php
//翻轉中文字符串
//1. 使用正則 preg_split()轉化爲一維數組-- 對數組翻轉-- 合併
function strrev_utf8_1($str){
    return join('' , array_reverse(preg_split('//us', $str, -1, PREG_SPLIT_NO_EMPTY)));
}
$str = '你好中國 hello word';
var_dump(strrev_utf8_1($str));                  //string(23) "drow olleh 國中好你"


//2. 使用正則 preg_match_all()轉化爲二維數組-- 對數組翻轉-- 合併
function strrev_utf8_2($str){
    preg_match_all('/./us', $str, $arr);
    return join('', array_reverse($arr[0]));
}
var_dump(strrev_utf8_1($str));                  //string(23) "drow olleh 國中好你"
?>

9.翻轉普通字符– 將www.去掉

<?php
//翻轉普通字符-- 將www.去掉
$str = 'www.baidu.com';
// 1. 使用substr()截取字符串-- 翻轉
var_dump(strrev(substr($str, 4)));              //string(9) "moc.udiab"
//2. 使用str_replace()替換字符串-- 翻轉
var_dump(strrev(str_replace('www.', '', $str)));    //string(9) "moc.udiab"
?>

10.獲取當前執行腳本路徑和參數

<?php
//獲取當前執行腳本路徑和參數-- url路徑是: ...../php_mianshi.php?sfs
//路徑 -- 1. 路徑---使用魔術常量
var_dump(__FILE__);                             //string 'F:\Apache\www\temp\php_demo\demo\php_mianshi.php' (length=48)
//路徑 -- 2. 使用$_server[]全局數組
var_dump($_SERVER['SCRIPT_FILENAME']);          //string 'F:/Apache/www/temp/php_demo/demo/php_mianshi.php' (length=48)
//參數
var_dump($_SERVER['QUERY_STRING']);             //string 'sfs' (length=3)
?>

11.標準的url中獲取文件擴展名

<?php
//標準的url中獲取文件擴展名
//1.使用basename去除文件後的所有內容, 定位. 和? 取中間 -- 適合文件目錄
function get_ext1($str){
    $file = basename($str);         //獲取文件後的所有的路徑(包括文件名
    $pos1 = strpos($file, '.');
    $pos2 = strpos($file, '?');
    if($pos2 === false){
        return substr($file, $pos1 + 1);
    }else{
        return substr($file, $pos1 + 1, $pos2 - $pos1 - 1);
    }
}
//2.使用pathinfo()得到一個數組 --- extension 是basename中.之後的內容
function get_ext2($str){
    $file = pathinfo($str); //第二個參數爲null時   則拆分成四個數組項 dirname, basename, extension, filename
    $extension = ($file['extension']);
    $pos1 = strpos($extension, '?');
    if($pos1 === false){
        return $extension;
    }else{
        return substr($extension, 0, $pos1);
    }
}
//3.因爲擴展名只有3位, 路徑中沒有?則直接從後截取3個字符
function get_ext3($str){
    $pos1 = strpos($str, '?');
    if($pos1 === false){
        return substr($str, -3, 3);
    }else{
        return substr($str, $pos1 - 3, 3);
    }
}
//4.使用parse_url函數拆分
function get_ext4($str){
    $path = parse_url($str);            //拆分4個數組項 scheme, host, path, query
    return substr($path['path'], -3, 3);
}
//5. 使用parse_url和pathinfo()結合
function get_ext5($str){
    $path = parse_url($str);
    $arr = pathinfo($path['path'], PATHINFO_EXTENSION);
    return $arr;
}
$str1 = 'http://www.baidu.com/index.php?sf=2&s=2';
$str2 = 'D:/www/excor/admin/index.php';
var_dump(get_ext1($str1));                              //string 'php' (length=3)
var_dump(get_ext2($str1));                              //string 'php' (length=3)
var_dump(get_ext3($str1));                              //string 'php' (length=3)
var_dump(get_ext4($str1));                              //string 'php' (length=3)
var_dump(get_ext5($str1));                              //string 'php' (length=3)
?>

12.取出指定的字符

<?php
//取出指定的字符
$str1 = 'http://www.baidu.com/index.php?sf=2&s=2';
var_dump(substr($str1, strpos($str1, '?'), 1));         //string '?' (length=1)
?>

13.下劃線改成駝峯標誌–命名方式

<?php
//下劃線改成駝峯標誌
//1. ucwords() 將字符串的中的所有單詞轉化爲大寫, 前提是 每個單詞用空格分開
function change_name_1($str){
    return str_replace(' ', '', ucwords(str_replace('_',' ',$str)));
}
//2. 先轉化爲數組, 利用array_map執行回調函數ucfirst將每個數組項轉化爲大寫,最後在組合成string
function change_name_2($str){
    $arr = explode("_",$str);
    $arr = array_map('ucfirst',$arr);
    return implode("",$arr);
}
$str1 = 'wangming_is_a_good_boy';
var_dump(change_name_1($str1));                 //string 'WangmingIsAGoodBoy' (length=18)
var_dump(change_name_2($str1));                 //string 'WangmingIsAGoodBoy' (length=18)
?>

14.統計字符在主字符串中出現的次數

<?php
//統計字符在主字符串中出現的次數
$str1 = 'http://www.baidu.com/index.php?sf=2&s=2';
//1. 直接使用substr_count()函數
var_dump(substr_count($str1, '.'));                  //int 3
//2. 現在按照查找的字符串轉化爲數組, 然後統計數組的個數 記得要減去一
var_dump(count(explode('.', $str1)) - 1);           //int 3
?>

15.取出郵箱中的域名—就是@後的

<?php
//取出郵箱中的域名---就是@後的
//1. 差分兩個數組,去最後一個數組的內容
function get_email_name_1($str){
    $arr = explode('@', $str);
    return $arr[1];
}
//2.定位到@, 然後取出@之後的元素
function get_email_name_2($str){
    return substr($str, strpos($str, '@') + 1);
}
//3. 利用preg_split()拆分成一維數組
function get_email_name_3($str){
    $arr = preg_split('/@/', $str, -1, PREG_SPLIT_NO_EMPTY);
    return $arr[1];
}
//4. strstr()查找包括@之後的字符,然後在截取
function get_email_name_4($str){
    return substr(strstr($str, '@'), 1);
}
$str1 = '[email protected]';
var_dump(get_email_name_1($str1));                      //string '163.com' (length=7)
var_dump(get_email_name_2($str1));                      //string '163.com' (length=7)
var_dump(get_email_name_3($str1));                      //string '163.com' (length=7)
var_dump(get_email_name_4($str1));                      //string '163.com' (length=7)
?>

16.is_null()

<?php
error_reporting(0);
//is_null() ---- 變量沒有定義  --- 變量沒有賦值--- 變量賦值爲null----變量被unset 結果是: true, 否則是false
$str1;
$str2 = '';
$str3 = ' ';
$str4 = null;
$str5 = array();
$str6 = 'nihao';
unset($str6);
var_dump(is_null($str1));                               //boolean true
var_dump(is_null($str2));                               //boolean false
var_dump(is_null($str3));                               //boolean false
var_dump(is_null($str4));                               //boolean true
var_dump(is_null($str5));                               //boolean false
var_dump(is_null($str6));                               //boolean true
var_dump(is_null($str7));                               //boolean true
?>

17.去除html標籤

<?php
//去除html標籤 -- 使用strip_tags()
$str = '<div><span>hello world !</span></div>';
var_dump(strip_tags($str));                 //string 'hello world !' (length=13)
?>

18.判斷一個日期字符是否是合法

<?php
header('Content-type:text/html; charset=utf-8');
//判斷一個日期字符是否是合法的
function check_date($date){
    if(date('Y-m-d H:i:s',strtotime($date)) == $date){
        return '日期合法';
    }else{
        return '日期不合法';
    }
}
$date_str = '2015-38-02 20:45:30';
var_dump(check_date($date_str));    //string '日期不合法' (length=15)
?>

20.獲取上個月的最後一天

<?php
//獲取上個月的最後一天
function get_pro_month_lastday($date = ''){
    if($date == ''){
        $date = time();
    }else{
        $date = strtotime($date);
    }
    $day = date('j', $date);        //得到本月的第幾天
    return date('Y-m-d', strtotime(- $day . "day", $date)); //strtotime()第一個參數設置爲負的本本月的第幾天,然後就得到上一個月的最後一天了
}
var_dump(get_pro_month_lastday("2015-4-4"));            //string '2015-03-31' (length=10)
?>

21.獲取字符串的編碼格式

<?php
//獲取字符串的編碼格式-- 利用mb_detect_encoding()函數
$str = 'hello world 你好啊';
$encode = mb_detect_encoding($str, array("ASCII","UTF-8","GB2312","GBK"));      //UTF-8
$encode = mb_detect_encoding($str);                                             //UTF-8
var_dump($encode);
?>

22.設置string的編碼格式

<?php
//設置string的編碼格式-- 利用iconv()-- 通過length可以看出, utf-8下的一箇中文字符相當於3個utf-8下的普通字符, gbk則是2$str = 'hello world 你好啊';
var_dump(mb_detect_encoding($str));     //查看當前字符串的編碼---結果: string 'UTF-8' (length=5)
var_dump(iconv('UTF-8', 'GBK', $str));  //string 'hello world ���ð�' (length=18)
var_dump(iconv('GBK', 'UTF-8', iconv('UTF-8', 'GBK', $str)));   //string 'hello world 你好啊' (length=21)
?>

23.多進程寫入一個文件–加鎖

<?php
//多進程寫入一個文件--加鎖
function write_file($path, $content){
    $handle = fopen($path, 'a');            //以文件追加的方式打開
    if($handle){
        if(flock($handle, LOCK_EX)){        //添加排他鎖, 只有當前進程解除鎖定,其它進程才能使用該文件
            fwrite($handle, $content);      //寫入
            fflush($handle);                //刷新緩衝區
            flock($handle, LOCK_UN);        //解鎖
            fclose($handle);                //關閉文件
        }else{
            var_dump('該文件已經鎖定,目前不能訪問');
        }
    }else{
        var_dump('文件無法讀取,檢查路徑');
    }
}
$path = 'test.md';
write_file($path, '寫入文件');
?>

24.給定一個數組,找出數組中重複的元素

//1.使用array_count_values()函數,統計數組中每個元素出現的次數, 最後在遍歷一下
<?php
$arr = ['a','b','c','c','b'];
$len = count((array_count_values($arr)));
$temp = array_count_values($arr);
foreach($temp as $key=>$val){
    if($temp[$key] >= 2){
        var_dump($key);
    }
}
?>

//2.使用array_unqiue()去除重複數組,咋利用array_diff_assoc()按鍵值和數值進行比較兩個數組,注意:第一個數組是參照對象
<?php
$arr = ['a','b','c','c','b'];
$temp = array_unique($arr);
var_dump(array_diff_assoc($arr,$temp));
?>

//3.數組中彈出一個元素,比較這個元素是否還在數組中,如果在表示有重複的
<?php
$arr = ['a','b','c','c','b'];
$temp = true;
while($temp){
    $temp = array_pop($arr);
    if(in_array($temp, $arr)){
        var_dump($temp);
    }
}
?>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章