随机取出数组中的某些值,并删除它们array_splice,array_slice
今天遇到这样一个情景。这样的,一个抽奖活动,预先获取一堆人参与信息,一个人最多只能中奖一次。活动有活动的配置信息,比如说一等奖有多少人,二等奖有多少人等等。。
说白了,就是从这个参与人数组里,取出来一部分人放到各个奖项里。这里我的处理方式,直接把各个奖项的获奖者放到一起。
循环奖项的数组,然后从参与人信息里取数据。核心函数有两个,一个是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的选项参数。它主要被用作截取某些个连续的数组元素。