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);

}

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

最新文章

  1. 【JVM】JVM系列之类加载机制(四)
  2. Word 宏命令大全
  3. Winform开发框架中实现信息阅读状态的显示和存储
  4. CentOS中iptables防火墙 开放80端口方法
  5. Lua基础
  6. new char[]和new char()的区别
  7. javascript whenReady
  8. Python 核心数据类型
  9. MySQL查询LIKE如何匹配下划线 通配符转义
  10. 【Leetcode】Set Matrix Zeroes
  11. Linux学习之修改主机名
  12. Linux红黑树(二)——访问节点
  13. Entity Framework,TransactionScope 混合使用的问题讨论
  14. zlib报“LNK2001:无法解析的外部符号”错误
  15. ubuntu实时显示网速cpu占用和内存占用率
  16. Redis 学习笔记1:CentOS 6.7下安装Redis
  17. Android AIDL 实例
  18. 2018-2019-1 20189206 《Linux内核原理与分析》第七周作业
  19. Dynamic Shortest Path CodeForces - 843D (动态最短路)
  20. leetcode 460. LFU Cache

热门文章

  1. 位运算总结(Bit Operation)
  2. [Error]Win8安装程序出现2502、2503错误解决方法
  3. HDU- 3605 - Escape 最大流 + 二进制压位
  4. hdu 5495 LCS(并查集)
  5. codeforces 755D. PolandBall and Polygon(线段树+思维)
  6. CF1003D Coins and Queries 贪心
  7. cesium页面小控件的隐藏
  8. webpack多页面应用打包问题-新增页面打包JS影响旧有JS资源
  9. 基于C-W节约算法的车辆路径规划问题的Java实现
  10. Day004作业