PHP小集

提取数组中的重复数据

function FetchRepeatMemberInArray($array){
    // 获取去掉重复数据的数组
    $unique_arr = array_unique ( $array );
    // 获取重复数据的数组
    $repeat_arr = array_diff_assoc ( $array, $unique_arr );
    return $repeat_arr;
}

二维数组排序—支持单条件或多条件 来自 axioscros

<?php
function arraySort($array,$sortRule,$order="asc"){
    /**
     * $array = [
     *              ["book"=>10,"version"=>10],
     *              ["book"=>19,"version"=>30],
     *              ["book"=>10,"version"=>30],
     *              ["book"=>19,"version"=>10],
     *              ["book"=>10,"version"=>20],
     *              ["book"=>19,"version"=>20]
     *      ];
     */
    if(is_array($sortRule)){
        /**
         * $sortRule = ['book'=>"asc",'version'=>"asc"]; 条件支持N多个
         */
        usort($array, function ($a, $b) use ($sortRule) {
            foreach($sortRule as $sortKey => $order){
                if($a[$sortKey] == $b[$sortKey]){continue;}
                return (($order == 'desc')?-1:1) * (($a[$sortKey] < $b[$sortKey]) ? -1 : 1);
            }
            return 0;
        });
    }else if(is_string($sortRule)){
        /**
         * $sortRule = "book";
         * $order = "asc";
         */
        usort($array,function ($a,$b) use ($sortRule,$order){
            if($a[$sortRule] == $b[$sortRule]){
              return 0;
            }
            return (($order == 'desc')?-1:1) * (($a[$sortRule] < $b[$sortRule]) ? -1 : 1);
        });
    }
    return $array;

}
// 使用
$array = [
                 ["book"=>10,"version"=>10],
                 ["book"=>19,"version"=>30],
                 ["book"=>10,"version"=>30],
                 ["book"=>19,"version"=>10],
                 ["book"=>10,"version"=>20],
                 ["book"=>19,"version"=>20]
];

//单条件
$array = arraySort($array,'book','asc');
var_dump[$array];


//多条件
arraySort($array,['book'=>"asc",'version'=>"asc"]);
var_dump[$array];

PHP去除Html所有标签、空格以及空白

/**
 * PHP去除Html所有标签、空格以及空白
 */
function DeleteHtml($str)
{
    $str = trim($str); //清除字符串两边的空格
    $str = strip_tags($str,""); //利用php自带的函数清除html格式
    $str = preg_replace("/\t/","",$str); //使用正则表达式替换内容,如:空格,换行,并将替换为空。
    $str = preg_replace("/\r\n/","",$str);
    $str = preg_replace("/\r/","",$str);
    $str = preg_replace("/\n/","",$str);
    $str = preg_replace("/ /","",$str);
    $str = preg_replace("/  /","",$str);  //匹配html中的空格
    return trim($str); //返回字符串
}

生成保持原图纵横比的缩略图

/**
 * 生成保持原图纵横比的缩略图,支持.png .jpg .gif
 * 缩略图类型统一为.png格式
 * $srcFile     原图像文件名称
 * $scale       缩放的比例
 * $toFile      缩略图文件名称,为空覆盖原图像文件
 * @return bool
*/
function CreateThumbnail($srcFile, $scale, $toFile="")
{
    if ($toFile == "")
    {
        $toFile = $srcFile;
    }
    $info = "";
    //返回含有4个单元的数组,0-宽,1-高,2-图像类型,3-宽高的文本描述。
    //失败返回false并产生警告。
    $data = getimagesize($srcFile, $info);
    if (!$data)
        return false;

    //将文件载入到资源变量im中
    switch ($data[2]) //1-GIF,2-JPG,3-PNG
    {
    case 1:
        if(!function_exists("imagecreatefromgif"))
        {
            echo "the GD can't support .gif, please use .jpeg or .png! <a href='javascript:history.back();'>back</a>";
            exit();
        }
        $im = imagecreatefromgif($srcFile);
        break;

    case 2:
        if(!function_exists("imagecreatefromjpeg"))
        {
            echo "the GD can't support .jpeg, please use other picture! <a href='javascript:history.back();'>back</a>";
            exit();
        }
        $im = imagecreatefromjpeg($srcFile);
        break;

    case 3:
        $im = imagecreatefrompng($srcFile);
        break;
    }

    //计算缩略图的宽高
    $srcW = imagesx($im);
    $srcH = imagesy($im);
    $sc = 1;
    if ($srcW>1500) {
        $sc=300/$srcW;

    }else{
        return true;
    }
    $ftoW = $srcW*$sc;
    $ftoH = $srcH*$sc;

    if (function_exists("imagecreatetruecolor"))
    {
        $ni = imagecreatetruecolor($ftoW, $ftoH); //新建一个真彩色图像
        if ($ni)
        {
            //重采样拷贝部分图像并调整大小 可保持较好的清晰度
            imagecopyresampled($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
        }
        else
        {
            //拷贝部分图像并调整大小
            $ni = imagecreate($ftoW, $ftoH);
            imagecopyresized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
        }
    }
    else
    {
        $ni = imagecreate($ftoW, $ftoH);
        imagecopyresized($ni, $im, 0, 0, 0, 0, $ftoW, $ftoH, $srcW, $srcH);
    }

    //保存到文件 统一为.png格式
    imagepng($ni, $toFile); //以 PNG 格式将图像输出到浏览器或文件
    ImageDestroy($ni);
    ImageDestroy($im);
    return true;
}

生成不重复id

function idout()
{
    $charid = strtoupper(md5(uniqid(mt_rand(), true)));

    $hyphen = chr(45);// "-"
    $uuid = substr($charid, 0, 8).$hyphen
    .substr($charid, 8, 4).$hyphen
    .substr($charid,12, 4).$hyphen
    .substr($charid,16, 4).$hyphen
    .substr($charid,20,12);
    return $uuid;
}

清空文件夹

/**
 * @title  清空文件夹
 * @author lyj [author] [2018-06-25]
 * @param  [type] $path [description]
 * @return [type]       [description]
 */
function deldir($path)
{
    //如果是目录则继续
    if(is_dir($path)){
        //扫描一个文件夹内的所有文件夹和文件并返回数组
        $p = scandir($path);
        foreach($p as $val){
            //排除目录中的.和..
            if($val !="." && $val !=".."){
                //如果是目录则递归子目录,继续操作
                if(is_dir($path.$val)){
                    //子目录中操作删除文件夹和文件
                    deldir($path.$val.'/');
                    //目录清空后删除空文件夹
                    @rmdir($path.$val.'/');
                }else{
                    //如果是文件直接删除
                    unlink($path.$val);
                }
            }
        }
    }
}

返回某个字符串在字符串中出现的所有位置

    function getCharpos($str, $char)
    {
        $j = 0;
        $arr = array();
        $count = substr_count($str, $char);
        for($i = 0; $i < $count; $i++){
            $j = strpos($str, $char, $j);
            $arr[] = $j;
            $j = $j+1;

        }
        return $arr;
    }

打印


function ee($data,$desc='',$dump=true)
{
    if ($dump) {
        echo "<font size='3' color='red'>{$desc}</font></br>";
        dump($data);die;
    }
}
// 打印
function pre($data)
{
    echo "<pre>";print_r($data);echo "</pre>";die;
}

/**
 * 日记文件 用于记录数据或者对比交互的数据
 * @param      $data 任意数据类型
 * @param      $desc 描述
 */
function record($data, $desc = null)
{
    $c = request()->controller();
    $a = request()->action();

    $string = PHP_EOL."<--------- ".$c.'/'.$a.' -- '.date("Y-m-d H:i:s", time())." --------->"
        .PHP_EOL.var_export($data,TRUE)
        .PHP_EOL."<---------------------------- ".'↑↑↑描述↑↑↑: '. $desc." --------------------------->".PHP_EOL.PHP_EOL;

    file_put_contents("anbaologloglogloglogloglogloglog.txt", $string, FILE_APPEND);
}

获取 月 起始时间戳和结束时间戳

/**
 *  获取 月 起始时间戳和结束时间戳
 */
function theMonth($y,$m='')
{
    if ($y == '' || $y == null) {
        throw new Exception("参数年份$y未传递!");
    }

    if ($m == '') {
        $bg = mktime(0,0,0,date('m'),1,date('Y'));
        $ed = mktime(23,59,59,date('m'),date('t'),date('Y'));
    }else{
        $month = $y."-".$m;//当前年月
        $bg = strtotime($month);//指定月份月初时间戳
        $ed = mktime(23, 59, 59, date('m', strtotime($month))+1, 00);//指定月份月末时间戳
    }

    return  [$bg,$ed];
}

记录运行时间

function bgtime()
{
    Session::set('worktime',microtime(true));
}

function edtime($data='', $desc='打印的数据')
{
    $t2 = microtime(true);
    $t1 = Session::get('worktime');

    Session::delete('worktime');

    if($data!='' || $data===false) dp($data, $desc);

    ee('耗时 '.round($t2-$t1,3).' 秒');
}

截取最后第几个字符串

function subStrByNum($str, $num=1)
{
    return substr($str,0,strlen($str)-$num);
}

某天开始和结束时间戳

function dayTime($time)
{
    // 当天的零点时间戳
    $today = strtotime(date('Y-m-d', $time));
    // 当天时间戳截止
    $end = $today + 24 * 60 * 60;
    return $time = ['bg'=>$today, 'ed'=>$end];
}

返回上一页出现重新提交表单问题 加上这句

header("Cache-control: private");

json_encode()中文乱码问题

return json_encode($res, JSON_UNESCAPED_UNICODE);

json_encode($para,JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE);

base64图片数据 写入生成图片

// data base64数据
public function add_img_file($data)
{
    if (preg_match('/^(data:\s*image\/(\w+);base64,)/', $data, $result)) {//正则获取图片格式
        $type = $result[2];
        $path = '/Uploads/Picture/A175/' . date('Y-m-d') . '/';
        @chmod(SITE_PATH . $path, 0755);//修改权限
        if (!file_exists(SITE_PATH . $path)) {
            mkdir(SITE_PATH . $path, 0755 ,true);
        }
        //设置权限
        $new_file = md5(uniqid()) . '.' . $type;//用微秒和会员id产生md5唯一字符串
        if (file_put_contents(SITE_PATH . $path . $new_file, base64_decode(str_replace($result[1], '', $data)))) {
            return $path . $new_file;
        } else {
            return false;
        }
    }
}

PHP 数字前面补零 固定位数补0 str_pad() 函数

$num = 1;

$num=str_pad($num,3,"0",STR_PAD_LEFT);
echo $num;
// 001
// 函数说明
str_pad(string,length,pad_string,pad_type)

// 参数 描述
string      //必需。规定要填充的字符串。
length      //必需。规定新的字符串长度。如果该值小于字符串的原始长度,则不进行任何操作。
pad_string  //可选。规定供填充使用的字符串。默认是空白。
pad_type    //可选。规定填充字符串的哪边。
            //可能的值:
            STR_PAD_BOTH - //填充字符串的两侧。如果不是偶数,则右侧获得额外的填充。
            STR_PAD_LEFT - //填充字符串的左侧。
            STR_PAD_RIGHT - //填充字符串的右侧。默认。

Win命令行提示 php不是内部或外部命令

环境变量设置下,要把php的执行文件,也就是php.exe设置到环境变量里面

我的电脑->属性->高级->环境变量设置->PATH->编辑->在后面添加一个到php.exe的路径就可以了。

如安装在 (c:\phpstudy\PHP\php5.4.12) 复制这个地址 记得前面加 ; 如

Switch Case语句中多个值匹配同一个代码块的写法

版本 1:

switch ($p) {
    case 'home':
    case '':
        $current_home = 'current';
    break;

    case 'users.online':
    case 'users.location':
    case 'users.featured':
    case 'users.new':
    case 'users.browse':
    case 'users.search':
    case 'users.staff':
        $current_users = 'current';
    break;

    case 'forum':
        $current_forum = 'current';
    break;
}

版本 2:(个人喜欢,代码少)

switch ($p) {
    case 'home':
        $current_home = 'current';
    break;

    case 'users.online' || 'users.location' || 'users.featured' || 'users.browse' || 'users.search' || 'users.staff':
        $current_users = 'current';
    break;

    case 'forum':
        $current_forum = 'current';
    break;
}

测试结果:

对 10000 迭代运行一些速度测试:

Time1: 0.0199389457703 / / 如果语句

Time2: 0.0389049446106 //switch 语句

Time3: 0.106977939606 / / 阵列

关于mysql的数据类型的长度

因为最近要登记一些长度较大的数值,今天才仔细的查看了bigint的范围。

以前都忽略了mysql中数据长度的上限问题。

在mysql中创建表时,

varchar类型必须指定长度,

int类型可以不指定长度。

在mysql中使用界面创建表(不使用sql语句创建表),若不指定长度,它会为你指定默认长度

数据类型 默认长度 最大长度
varchar 255 65535
char 255 65535
double 0 255
float 0 255
int 11 255
tinyint 4 255
bigint 20 255
date 0 0
datetime 0 0
text 0 0

下载图片

function saveWximg($url='',$path='',$filename='')
{
    //$url = 'http://****/uploads/picture/headimg.png';
    //$path = "uploads/headimgs/";
    //$filename='';

    if ($url == ""):return false;
    endif;

    if ($path == "") {
        $path = './';
    }

    if ($filename == "") {
        $filename = date("dMYHis");
    }

    $ext = strrchr($url, ".");
    if ($ext != ".gif" && $ext != ".jpg" && $ext != ".png"):return false;
    endif;

    $file = $path . $filename . $ext;

    ob_start();//打开输出
    readfile($url);//输出图片文件
    $img = ob_get_contents();//得到浏览器输出
    ob_end_clean();//清除输出并关闭
    $size = strlen($img);//得到图片大小
    $fp2 = @fopen($file, "a");
    fwrite($fp2, $img);//向当前目录写入图片文件,并重新命名
    fclose($fp2);
    return $file;//返回新的文件名
}

php获取url字符串截取路径的文件名和扩展名的函数

php获取文件名

function retrieve($url)
{
preg_match('/\/([^\/]+\.[a-z]+)[^\/]*$/',$url,$match);
return $match[0];
return $match[1];
}

php获取文件扩展名 复制代码 代码如下:

function getExt($url)
{
$path=parse_url($url);
$str=explode('.',$path['path']);
return $str[1];
}
echo getExt('http://tools.jb51.net/abc/de/fg.php?id=1');

PHP7标量类型declare

模式声明:declare(strict_types=1);

默认情况值为0,值为1代表为严格校验的模式

PHP5.6及更晚 可变参数列表

function sum(...$nums){
    //....
    return $result;
}
echo sum(1,2,3,4)
// 结果 10

引用传值

function swap(&$a, &b){
    $tmp = $a;
    $a = $b;
    $b = $tmp;
}

$a = 1;
$b = 2;
swap($a,$b);
echo $a;
echo $b;
// $a=2,$b=1;



导航