今天遇到这样一个情景。这样的,一个抽奖活动,预先获取一堆人参与信息,一个人最多只能中奖一次。活动有活动的配置信息,比如说一等奖有多少人,二等奖有多少人等等。。

说白了,就是从这个参与人数组里,取出来一部分人放到各个奖项里。这里我的处理方式,直接把各个奖项的获奖者放到一起。

循环奖项的数组,然后从参与人信息里取数据。核心函数有两个,一个是shuffle(),一个是array_splice()

<?php

$prize_arr = array(
array('id' => 1, 'prize' => '平板电脑', 'v' => 1), //其中id表示中奖等级,prize表示奖品,v表示中奖概率(这里暂时当人数了
array('id' => 2, 'prize' => '数码相机', 'v' => 2),
array('id' => 3, 'prize' => '音箱设备', 'v' => 3),
array('id' => 4, 'prize' => '4G优盘', 'v' => 4),
); $persons = array(
'0' => 'aaa',
'1' => 'bbb',
'2' => 'ccc',
'3' => 'ddd',
'4' => 'eee',
'5' => 'fff',
'6' => 'ggg',
'7' => 'hhh',
'8' => 'iii',
'9' => 'jjj',
'10' => 'kkk',
);
shuffle($persons);// 打乱顺序,表示随机取人 $finall_arr = array();
// 删除并取出,array_splice()这个函数很强大,对数组的增删改都可以...第四个参数可以替换;返回值就是删除掉的元素组成的数组
foreach($prize_arr as $val){
$finall_arr[$val['id']] = array(
'person' => array_splice($persons, 0, $val['v'])
);
} print_r($finall_arr);

这里顺便记录下,array_splice()这个函数,操作的是数组的地址指针,直接改变原数组。并且它的返回值会改变数组原有的key,会重新索引。

而array_slice()这个数组不是操作指针,并且该函数还有个preserve_key是否保留原key的选项参数。它主要被用作截取某些个连续的数组元素。

随机取出数组中的某些值,并删除它们array_splice,array_slice的更多相关文章

  1. jst通用删除数组中重复的值和删除字符串中重复的字符

    以下内容属于个人原创,转载请注明出处,非常感谢! 删除数组中重复的值或者删除字符串重复的字符,是我们前端开发人员碰到很多这样的场景.还有求职者在被面试时也会碰到这样的问题!比如:问删除字符串重复的字符 ...

  2. PHP中获取数组中单列的值

    PHP中获取数组中单列的值如下: 利用PHP中的数组函数 array_column():返回数组中某个单列的值.(PHP 5.5+适用) 语法: array_column(array,column_k ...

  3. c# 获取数组中最大数的值

    求数组中最大的数的值:1.数组的max函数: class Program { static void Main(string[] args) { ,,,,,,,,,}; int max= GetMax ...

  4. php取出数组中的最大值

    <?php /** * @param $arr * @return mixed * php取出数组中的最大值(方法一) */ function getMax($arr){ $max=$arr[0 ...

  5. JavaScript查找数组中最大的值

    // 查找一个数组中最大的数 // 定义一个方法 searchMax function searchMax(arr) { // 声明一个变量MaxNumber假设为数组中最大的值arr[0]; var ...

  6. PHP检测数组中的每个值是否含有特殊字符

    本文出至:新太潮流网络博客 /** * [TestArray 检测数组是一维还是二维] * @E-mial wuliqiang_aa@163.com * @TIME 2017-04-07 * @WEB ...

  7. ShuffleElements(随机打乱数组中的元素)

    给定一个数组,随机打乱数组中的元素,题意很简单直接上代码: package Array; import java.util.Arrays; import java.util.Collections; ...

  8. PHP如何根据数组中的键值进行排序

    主要是使用PHP的排序函数,asort()和arsort(). 为了减少代码的耦合性,我们将根据数组中的键值进行排序封装成一个函数 <?php $array = array( array(), ...

  9. JavaScript去除数组中的重复值

    用原型函数(prototype)可以定义一些很方便的自定义函数,实现各种自定义功能. Javascript 中的原型函数(prototype)的工作原理,在 javascript 中每次声明新函数的过 ...

随机推荐

  1. 排序算法(6)--exchang Sorting--交换排序[1]--Bubble Sort--冒泡排序

    1.基本思想 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序 2.实现原理 冒泡排序是一种简单的排序算法,根据顺序两 ...

  2. tilestache

    pip install tilestache -i https://mirrors.ustc.edu.cn/pypi/web/simple python C:/Python27/ArcGIS10.4/ ...

  3. 用php和ajax写一个省市区的三级联动,实现地区的下拉选择

    要实现这个页面的三级联动,我们需要建立三个php文件,第一个php文件我们导入jQuery文件,里面嵌入JavaScript:第二个php文件我们做一个php的处理页面,里面引入我们封装好的数据库类文 ...

  4. Leetcode题解之Valid Palindrome II

    1.题目描述 2.问题分析 使用两个下标,检测下标对应的字符是否相等,若不相等,则考察子串. 3.代码 bool validPalindrome(string s) { , j = s.size()- ...

  5. LeetCode题解之Find All Numbers Disappeared in an Array

    1.题目描述 2.问题分析 使的 A[i] = i+1 ,最后检查不满足这个条件的i+1 .即为缺失的值. 3.代码 vector<int> findDisappearedNumbers( ...

  6. [Synology] [群晖] 关闭被占用的文件

    1. Control Panel: Control Panel > Terminal & SNMP Enable SSH service 2. SSH into Synology 3. ...

  7. python基础之os.system函数

    前言 os.system方法是os模块最基础的方法,其它的方法一般在该方法基础上封装完成. os的system原理 system函数可以将字符串转化成命令在服务器上运行:其原理是每一条system函数 ...

  8. Win7 user profile cant logon

    1.local user:testlb1 1234@cat can login safe model 1.重新启动计算机开机时连续点击F8,选择进入安全模式.2.开始-在搜索栏中输入services. ...

  9. win7X64位安装mysql-5.7.16

    今天尝试在win7系统中安装mysql,发现过程有点复杂,不过还好已经成功安装,写个博客纪念一下,顺便可以帮助大家. 1.在官网上面下载mysql, 注意:一定要下载对应的版本,第一次下载的是最下面一 ...

  10. 封装Ajax框架!(前言篇)

    Ajax技术就是利用javascript和xml实现异步交互的功能. 首先先来介绍一下Ajax相关知识点,如果这些你都会的话,请直接跳转到封装ajax框架!(代码篇) 一.Ajax对象的创建 1.创建 ...