站三界导航
首页 TP代码
  • preg_match_all用法
    preg_match_all用法

    (PHP4,PHP5,PHP7,PHP8)preg_match_all — 执行一个全局正则表达式匹配说明preg_match_all(string $pattern,string $subject,array &$matches =null,int $flags =0,int $offset =0): int|false|null搜索subject中所有匹配pattern给定正则表达式的匹配结果并且将它们以flag指定顺序输出到matches中.在第一个匹配找到后,子序列继续从最后一次匹配位置搜索.参数pattern要搜索的模式,字符串形式。subject输入字符串。matches多维数组,作为输出参数输出所有匹配结果,数组排序通过flags指定。flags可以结合下面标记使用(注意不能同时使用PREG_PATTERN_ORDER和PREG_SET_ORDER):PREG_PATTERN_ORDER结果排序为$matches[0]保存完整模式的所有匹配, $matches[1] 保存第一个子组的所有匹配,以此类推。案例:<?php$str="<p><imgsrc='images/bg.png'alt='背景'/></p>";$str_RE="/[img|IMG].*?src=['|\"](.*?(?:[.gif|.jpg|.png]))['|\"].*?[\/]?>/";preg_match_all($str_RE,$str,$arr,PREG_SET_ORDER);print_r($arr);echo"<br/>";foreach($arras$key=>$value){echo$key.":".$value[0]."<br/>";echo$key.":".$value[1]."<br/>";}?>效果:

    • TP代码
    • 54阅读
    • 2022-10-21

  • function_exists判断函数是否定义
    function_exists判断函数是否定义

    适用版本:(PHP4,PHP5,PHP7)function_exists—如果给定的函数已经被定义就返回TRUEfunction_exists(string$function_name):bool说明:在已经定义的函数列表(包括系统自带的函数和用户自定义的函数)中查找function_name。如果function_name存在且的确是一个函数就返回TRUE,反之则返回FALSE。实列:<?phpif(function_exists('show')){echo"定义";}else{echo"未定义";}

    • TP代码
    • 66阅读
    • 2022-10-21

  • tp5截取字符串
    tp5截取字符串

    /***截取字符串*@param$start开始截取位置*@param$length截取长度*@return*@authorMichael_xu*/functionmsubstr($str,$start=0,$length,$charset="utf-8",$suffix=true){if(function_exists("mb_substr")){$slice=mb_substr($str,$start,$length,$charset);}elseif(function_exists('iconv_substr')){$slice=iconv_substr($str,$start,$length,$charset);if(false===$slice){$slice='';}}else{$re['utf-8']="/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";$re['gb2312']="/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";$re['gbk']="/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";$re['big5']="/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";preg_match_all($re[$charset],$str,$match);$slice=join("",array_slice($match[0],$start,$length));}if(utf8_strlen($str)<$length)$suffix=false;return$suffix?$slice.'...':$slice;}

    • TP代码
    • 52阅读
    • 2022-10-21

  • tp5数组转字符串(以逗号隔开)
    tp5数组转字符串(以逗号隔开)

    /***数组转换字符串(以逗号隔开)*@param*@return*@authorMichael_xu*/functionarrayToString($array){if(!is_array($array)){$data_arr[]=$array;}else{$data_arr=$array;}$data_arr=array_filter($data_arr);//数组去空$data_arr=array_unique($data_arr);//数组去重$data_arr=array_merge($data_arr);$string=$data_arr?','.implode(',',$data_arr).',':'';return$string?:'';}

    • TP代码
    • 57阅读
    • 2022-10-21

  • tp5字符串换转数组(以逗号隔开)
    tp5字符串换转数组(以逗号隔开)

    /***字符串转换数组(以逗号隔开)*@param*@return*@authorMichael_xu*/functionstringToArray($string){if(is_array($string)){$data_arr=array_unique(array_filter($string));}else{$data_arr=$string?array_unique(array_filter(explode(',',$string))):[];}$data_arr=$data_arr?array_merge($data_arr):[];return$data_arr?:[];}

    • TP代码
    • 90阅读
    • 2022-10-21

  • tp5根据时间戳获取星期几
    tp5根据时间戳获取星期几

    /***根据时间戳获取星期几*@param$time要转换的时间戳*/functiongetTimeWeek($time,$i=0){$weekarray=array("日","一","二","三","四","五","六");$oneD=24*60*60;return"星期".$weekarray[date("w",$time+$oneD*$i)];}

    • TP代码
    • 54阅读
    • 2022-10-21

  • tp5二维数组排序
    tp5二维数组排序

    /***二维数组的排序*@paramarray$arr需要排序的二维数组*@paramstring$field以这个数组的值来排序*@paramstring$direction排序规则SORT_ASC升序SORT_DESC降序*@returnarray排序后的数组*@authorhttps://beltxman.com/*/functionarraySort($arr,$field,$direction='SORT_DESC'){$arrSort=array();foreach($arrAS$uniqid=>$row){foreach($rowAS$key=>$value){$arrSort[$key][$uniqid]=$value;}}array_multisort($arrSort[$field],constant($direction),$arr);return$arr;}

    • TP代码
    • 60阅读
    • 2022-10-21

  • tp5将秒数转换为时间 (年、天、小时、分、秒)
    tp5将秒数转换为时间 (年、天、小时、分、秒)

    /***将秒数转换为时间(年、天、小时、分、秒)*@param*/functiongetTimeBySec($time){if(is_numeric($time)){$value=array("years"=>0,"days"=>0,"hours"=>0,"minutes"=>0,"seconds"=>0,);if($time>=31556926){$value["years"]=floor($time/31556926);$time=($time%31556926);$t.=$value["years"]."年";}if($time>=86400){$value["days"]=floor($time/86400);$time=($time%86400);$t.=$value["days"]."天";}if($time>=3600){$value["hours"]=floor($time/3600);$time=($time%3600);$t.=$value["hours"]."小时";}if($time>=60){$value["minutes"]=floor($time/60);$time=($time%60);$t.=$value["minutes"]."分钟";}if($time<60){$value["seconds"]=floor($time);$t.=$value["seconds"]."秒";}return$t;}else{return(bool)FALSE;}}

    • TP代码
    • 52阅读
    • 2022-10-21

  • THINKPHP5 的提高查询技巧
    THINKPHP5 的提高查询技巧

    查询值为Null的数据//查询email为空,并且name不为空的用户数据User::whereNull('email')->whereNotNull('name')->select();多个字段同一个查询条件快捷查询方式是一种多字段相同查询条件的简化写法,可以进一步简化查询条件的写法,在多个字段之间用|分割表示OR查询,用&分割表示AND查询,例如:User::where('name|title','like','thinkphp%')->where('create_time&update_time','>',0)->find();数组对象查询如果你升级老版本的系统到5.1,由于数组查询方式的变化,而你又不希望全部换成表达式查询,那么可以使用数组对象查询。usethink\db\Where;//5.0的数组查询条件$map=['name'=>['like','thinkphp%'],'title'=>['like','%think%'],'id'=>['>',10],'status'=>1,];User::where(newWhere($map))->select();只需要把原来的where($map)改成where(newWhere($map))即可完成简单的数组查询升级兼容。使用快捷方法对于一些常用的查询,系统封装了快捷查询方法,例如:User::whereIn('id',[1,2,3])->whereLike('name','think%')->select();相当于下面的查询User::where('id','in',[1,2,3])->where('name','like','think%')->select();更多的方法可以参考官方手册或者使用IDE的自动提示。获取字段值和列数据对于一些简单的数据获取,你完全不需要查询整个表的数据,例如查询某个字段(满足条件的)值或者列数据。//获取id为10的用户名称User::where('id',10)->value('name');//获取状态为1的用户名称列表User::where('status',1)->column('name');//获取分数大于80的用户分数列表,以用户ID为索引User::where('score','>',80)->column('score','id');聚合查询可以直接进行各种聚合查询,包括:User::count();User::max('score');User::min('score');User::avg('score');Blog::sum('read_count');如果你的min/max查询的是一个字符串类型字段,记得加上第二个参数。//获取name字段的最大值User::max('name',false);时间区间查询时间查询主要用于时间字段的区间查询,支持所有类型的时间字段。//大于某个时间User::whereTime('birthday','>=','2008-10-1')->select();//小于某个时间User::whereTime('birthday','<','2000-10-1')->select();//时间区间查询User::whereBetweenTime('birthday','1990-10-1','2000-10-1')->select();//不在某个时间区间User::whereNotBetweenTime('birthday','1970-10-1','2000-10-1')->select();如果whereBetweenTime方法没有指定第三个参数,则表示查询当天的数据//查询2000年10月1日出生的用户User::whereBetweenTime('birthday','2000-10-1')->select();时间表达式查询对于一些非具体的时间查询,比较适合使用时间表达式进行查询,例如://获取今天的博客Blog::whereTime('create_time','today')->select();//获取昨天的博客Blog::whereTime('create_time','yesterday')->select();//获取本周的博客Blog::whereTime('create_time','week')->select();//获取上周的博客Blog::whereTime('create_time','lastweek')->select();//获取本月的博客Blog::whereTime('create_time','month')->select();//获取上月的博客Blog::whereTime('create_time','lastmonth')->select();//获取今年的博客Blog::whereTime('create_time','year')->select();//获取去年的博客Blog::whereTime('create_time','lastyear')->select();高级的时间表达式查询可以使用PHP的相对时间格式,例如://查询两天以内的博客Blog::whereTime('create_time','-2days')->select();//查询昨天中午后发的博客Blog::whereTime('create_time','yesterdaynoon')->select();更多的时间表达式查询你可以自由发挥。时间字段范围查询你可以查询当前时间是否在两个时间字段区间范围内,通常用于一些活动以及优惠券的有效期查询等等。//查询有效期内的活动Event::whereBetweenTimeField('start_time','end_time')->select();//查询没有开始或者已经过期的活动Event::whereNotBetweenTimeField('start_time','end_time')->select();字段比较可以直接比较两个字段的大小进行查询User::whereColumn('update_time','>','create_time')->select();User::whereColumn('score1','>','score2')->select();如果需要比较两个字段相同,可以使用User::whereColumn('score1','score2')->select();动态查询使用动态查询可以进一步简化你的查询条件,不过缺点是可能无法做到IDE的自动提示了,例如://根据邮箱(email)查询用户信息User::whereEmail('thinkphp@qq.com')->find();//根据昵称(nick_name)查询用户User::whereNickName('like','%流年%')->select();//根据邮箱查询用户信息User::getByEmail('thinkphp@qq.com');//根据昵称(nick_name)查询用户信息User::getByNickName('流年');//根据邮箱查询用户的昵称User::getFieldByEmail('thinkphp@qq.com','nick_name');//根据昵称(nick_name)查询用户邮箱User::getFieldByNickName('流年','email');条件查询利用条件查询你可以很方便的控制查询条件分支,你再也不需要在组装查询条件的时候写大量的if和else了。User::when($condition,function($query){//满足条件后执行$query->where('score','>',80)->limit(10);})->select();并且支持不满足条件的分支查询,并且支持多次调用when方法。User::when($condition,function($query){//满足条件后执行$query->where('score','>',80)->limit(10);},function($query){//不满足条件执行$query->where('score','>',60);});JSON查询如果你的字段类型使用的是JSON类型,那么可以直接使用框架提供的JSON查询支持。User::where('info->nickname','ThinkPHP')->find();注意,需要在模型里面定义JSON字段属性。<?phpnamespaceapp\index\model;usethink\Model;classUserextendsModel{//设置json类型字段protected$json=['info'];}如果使用Db查询的话,可以改为$user=Db::name('user')->json(['info'])->where('info->nickname','ThinkPHP')->find();SQL函数查询如果需要对某个字段使用SQL函数表达式查询,可以使用User::whereExp('nickname',"=CONCAT(name,'-',id)")->whereRaw('LEFT(nickname,5)=?',['think'])->select();注意whereExp和whereRaw方法的区别,前者是对某个字段使用SQL函数表达式,后者是整个查询就是一个SQL函数表达式。字段递增/递减单独对某个字段进行递增/递减操作,可以用://score字段加1User::where('id',1)->setInc('score');//score字段加5User::where('id',1)->setInc('score',5);//score字段减1User::where('id',1)->setDec('score');//score字段减5User::where('id',1)->setDec('score',5);可以支持延时更新//延时30秒更新score字段User::where('id',1)->setInc('score',1,30);如果需要同时递增/递减多个字段的话,可以使用://博客的阅读数递增1评论数递减2Blog::where('id',10)->inc('read_count')->dec('comment_count',2)->update();指定字段值排序如果你需要按照指定字段的值的顺序来排序,可以使用User::where('status',1)->orderField('id',[1,2,3])->select();从主库读取如果你使用了数据库的主从分离,当刚写入数据后,数据库的主从同步可能还没来得及同步,这个时候立刻查询数据可能会出错,你可以使用下面的方法从主库读取。$user=User::create($data);$user->readMaster()->select();你可以全局配置数据写入后自动读取主库//模型写入后自动读取主服务器'read_master'=>true,获取自增ID使用Db类的insert方法或者模型的save方法返回的不是自增主键,不过你可以使用。$userId=Db::name('user')->insertGetId($data);如果使用模型的话,自增主键的值会自动赋值给模型对象,可以直接获取。$user=User::create($data);echo$user->id;模型查询为空的处理模型查询数据不存在的话返回值为Null,所以必须要添加返回值判断然后进行数据处理,如果你不想手动判断,可以使用下面的方法查询,如果数据不存在则返回空的模型对象。//始终返回模型对象$user=User::where('id',10)->findOrEmpty();自动分批写入如果你需要一次写入大量数据,建议使用limit方法自动分批多次写入。//自动分批多次写入数据库每次最多写入1000条Db::name('user')->limit(1000)->insertAll($dataList);如果是使用模型的话,建议直接使用saveAll方法而不需要limit方法。$user=newUser;$user->saveAll($dataList);数据分批处理对于大量数据的处理操作,可以使用chunk分批处理方法。//每次处理100个数据User::chunk(100,function($users){foreach($usersas$user){//处理数据}});游标查询对于内存开销比较大的应用,在做大量数据查询和处理的时候,使用cursor方法进行游标查询,可以利用PHP的生成器特性,减少内存占用。$cursor=User::cursor();foreach($cursoras$user){//处理数据}

    • TP代码
    • 59阅读
    • 2022-10-21

  • tp5 常用的基础、跳转方法、模板环境变量输出、路由方法
    tp5 常用的基础、跳转方法、模板环境变量输出、路由方法

    1URl跳转部分第一个index是模块名,第二个index是方法名,第三个是控制器名称{:url(‘index/index/welcome’)}js页面带参数传参location.href="{:url(‘Toexamine/deletes’)}?id="+id;2路由此部分为查看TP5Route路由route.php里路由配置usethink\Route;//配置规则一Route::domain(‘admin’,function(){Route::rule([‘login’=>‘admin/index/login’,‘/’=>‘admin/index/index’,]);});3这里是后台传递参数前台输出内容1,后台传参数$list=“123”;$this->assign(‘list’,$list);2,视图页面{$list}3输出循环数组不分页$list=Db::table(“表名”)->select();$this->assign(‘list’,$list);分页$list=Db::table(“表名”)->paginate(分页的数量);$this->assign(‘list’,$list);4页面循环输出{volistname="list"id="li"}{$li.id}{$li.user_name}{/volist}示例图:分页:

    • TP代码
    • 49阅读
    • 2022-10-20

站三界导航
本站声明:本站严格遵守国家相关法律规定,非正规网站一概不予收录。本站所有资料取之于互联网,任何公司或个人参考使用本资料请自辨真伪、后果自负,站三界导航不承担任何责任。在此特别感谢您对站三界导航的支持与厚爱。