随机取出数组中的某些值,并删除它们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的选项参数。它主要被用作截取某些个连续的数组元素。

原文地址:https://www.cnblogs.com/firstForEver/p/5087494.html