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

  • 相关阅读:
    URAL——DFS找规律——Nudnik Photographer
    URAL1353——DP——Milliard Vasya's Function
    URAL1203——DPor贪心——Scientific Conference
    递推DP HDOJ 5389 Zero Escape
    区间DP UVA 1351 String Compression
    树形DP UVA 1292 Strategic game
    Manacher HDOJ 5371 Hotaru's problem
    同余模定理 HDOJ 5373 The shortest problem
    递推DP HDOJ 5375 Gray code
    最大子序列和 HDOJ 1003 Max Sum
  • 原文地址:https://www.cnblogs.com/firstForEver/p/5087494.html
Copyright © 2011-2022 走看看