1、多个字段多重排序

function sortArrByManyField(){

$args = func_get_args(); // 获取函数的参数的数组

if(empty($args)){

return null;

}

$arr = array_shift($args);

if(!is_array($arr)){

return array();

}

foreach($args as $key => $field){

if(is_string($field)){

$temp = array();

foreach($arr as $index=> $val){

$temp[$index] = $val[$field];

}

$args[$key] = $temp;

}

}

$args[] = &$arr;//引用值

call_user_func_array('array_multisort',$args);

return array_pop($args);

}

$userActionGoodsList = $this->sortArrByManyField($userActionGoodsNlist,'num',SORT_DESC,'time_span',SORT_DESC,'id',SORT_DESC);

2、php抽奖逻辑实现

{

"pname": "米达料小葫芦", // 抽奖商品名称

"ptype": "product",   // 抽奖商品类型

"pvalue": "29", // 抽奖商品值

"prate": "4", // 抽奖概率

"img": "https://mallssy.oss-cn-shenzhen.aliyuncs.com/home/store/goods/2/oss_2_2019040417473329380.png" // 抽奖商品图片

},

public function getLotteryGoods(){

$l_id = 1;

$lottery_model = new \app\common\model\Lotteryrule();

$linfo = $lottery_model->getOneById($l_id);

$lottery_json_list = $linfo['lottery_data'];

$prize_arr = \json_decode($lottery_json_list,true);

$num = 1;

foreach ($prize_arr as $key => $val) {

$arr[$num] = $val['prate'];

$num++;

}

$rid = $this->get_rand($arr); //根据概率获取奖项id

$res = $prize_arr[$rid-1]; //中奖项

return $res;

}

function get_rand($proArr) {

$result = '';

//概率数组的总概率精度

$proSum = array_sum($proArr);

//概率数组循环

foreach ($proArr as $key => $proCur) {

$randNum = mt_rand(1, $proSum);

if ($randNum <= $proCur) {

$result = $key;

break;

} else {

$proSum -= $proCur;

}

}

unset ($proArr);

return $result;

}

3、文件加锁

public function fileLock(){

//图片保存到其它地方

$lock_dir = __DIR__."/../../../public/uploads/fileLock";

//4、检查目录是否存在

if (!is_dir($lock_dir)) {

mkdir($lock_dir,0777,true);

}

$fp = fopen($lock_dir.'/test.txt', "w+");

if (flock($fp, LOCK_EX)) { // 进行排它型锁定

$content = date('Y-m-d H:i:s').'插入的'.PHP_EOL;

fwrite($fp, $content);

flock($fp, LOCK_UN); // 释放锁定

} else {

echo "Couldn't lock the file !";

}

fclose($fp);

}

后续还会更新,谢谢各位亲关注!

php常用操作(第二版)的更多相关文章

  1. Vim/Vi常用操作(第二版)

    周围同事不是用vim就是Emacs,你要是用一ultraedit,你都不好意思跟人家打招呼;什么插件呀,语法高亮呀,拼写检查呀,能给它开的都给它开着,就是一个字儿:酷. 你说这么牛B一东西,怎么着学会 ...

  2. 【软件构造】(转)Git详解、常用操作与版本图

    版本控制与Git 转自:http://www.cnblogs.com/angeldevil/p/3238470.html 版本控制 版本控制是什么已不用在说了,就是记录我们对文件.目录或工程等的修改历 ...

  3. Linux常用命令(第二版) --文件管理命令

    文件管理命令 并不建议:照着像命令大全这类的书来学! 常用命令大约有200个. 文件命名规则: a)除了'/'之外所有字符都合法! b)这些字符最好不用 1.空格符,制表符,退格符 2.连接符 3.特 ...

  4. 所有ORM操作 (第二版)

    ####################################################################### # PUBLIC METHODS THAT ALTER ...

  5. Linux常用命令(第二版) --Shell应用技巧

    Shell应用技巧 小技巧: 1.命令补全功能: <Tab>键 2.清屏: Ctrl+l 3.删除光标前所有内容: Ctrl+u 4.命令历史记录: history 这时:  !histo ...

  6. Linux常用命令(第二版) --系统开关机命令

    系统开关机命令 说明-服务器不会经常的关机,重启,没有故障,服务器不会关机.因此这些命令就显得不是很常用. 1.shutdown /usr/sbin/shutdown e.g. shutdown -h ...

  7. Linux常用命令(第二版) --压缩解压缩命令

    压缩解压缩命令: ----------.gz---------- 1.压缩 gzip[GNU zip]: /bin/gzip 格式: gzip 选项 [文件] #压缩文件,压缩后扩展名为.gz,Lin ...

  8. Linux常用命令(第二版) --文件搜索命令

    文件搜索命令 1.which /usr/bin/which #显示系统命令所在目录,绝对目录,不能查找文件 格式:which [系统命令] e.g. which ls 附-whereis:也可以查找到 ...

  9. Linux常用命令(第二版) --网络通信命令

    网络通信命令 1.write /usr/bin/write 格式: write [用户名] #用于向用户发送信息,前提是这个用户已经登录到了这台服务器主机,不然的话,也没有办法给他留言,所以,writ ...

  10. Linux常用命令(第二版) --帮助命令

    帮助命令 1.man[manual]: /usr/bin/man 获得命令或配置文件的帮助文档,优先查看命令的帮助 格式:man [命令或配置文件]  #会同时调用more E.g. man ls # ...

随机推荐

  1. ubuntu安装elasticsearch及head插件

    1.安装elasticsearch,参考http://www.cnblogs.com/hanyinglong/p/5409003.html就可以了 简单描述下: mkdir -p /usr/local ...

  2. Features Track 2018徐州icpc网络赛 思维

    Morgana is learning computer vision, and he likes cats, too. One day he wants to find the cat moveme ...

  3. 牛客网暑期ACM多校训练营(第三场) A PACM Team 01背包 记录路径

    链接:https://www.nowcoder.com/acm/contest/141/A来源:牛客网 Eddy was a contestant participating in ACM ICPC ...

  4. CSS动效集锦,视觉魔法的碰撞与融合(二)

    引言 长久以来,我认识到.CSS,是存在极限的.正如曾经替你扛下一切的那个男人,也总有他眼含热泪地拼上一切,却也无法帮你做到的事情,他只能困窘地让你看到他的无能为力,怅然若失. 然后和曾经他成长的时代 ...

  5. 调用arcpy包批量进行矢量掩膜提取

    使用一个polygon矢量提取某个文件夹中所有的tif格式栅格数据 (要确保先安装好arcpy包) import arcpy arcpy.CheckOutExtension("spatial ...

  6. Django2.* + Mysql5.7开发环境整合

    环境: MAC_OS 10.12 python 3.6 mysql 5.7.25 django 2.2.3 前提:python django mysql都已经安装成功可单独运行 一.settings中 ...

  7. 一次搞懂建模语言UML

    Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持,包括由需求分析到 ...

  8. 如何在spingboot项目中自定义自己的配置

    在实际开发中,为了方便我们常常会考虑把配置文件的某一类配置映射到配置类上,方便spring容器加载,实现方法如下: 1. 书写配置文件信息:书写某一类特定字段开头的配置信息,例如在yml配置文件中可以 ...

  9. Hive数据导入/导出

    1.1 导入/导出规则 EXPORT 命令导出数据表或分区,与元数据一起输出到指定位置.又可以从这个输出位置移动到不同的Hadoop 或Hive 实例中,并且使用IMPORT 命令导入. 当导出一个分 ...

  10. JSP官方文档(JavaServer Pages Specification)下载

    找了好久,终于找到官网的下载地址了.这样,就可以用一手的文档资料了! 下载地址:http://download.oracle.com/otndocs/jcp/jsp-2_3-mrel2-spec/ s ...