zoukankan      html  css  js  c++  java
  • php 从一个数组中随机获取固定数据

    <?php
    
    /* *
     * 通过一个标识,从一个数组中随机获取固定数据
     * $arr 数组
     * $num 获取的数量
     * $time 随机固定标识值,一般用固定时间或者某个固定整型
     * */
    function getRandFixedData($arr, $num, $time = 0)
    {
         if(empty($arr)){
             return $arr;
         }
       $time = abs($time);      //获取绝对值,防止出现负数
        //数组的个数
        $listcount = count($arr);
        /*if($listcount < $num){
            //数组总数不能少于需要获取的数量
            return [];
        }*/
        $num = $listcount < $num ? $listcount:$num;
        //分成$num 个数组每一个数组是多少个元素
        $parem = floor($listcount / $num);
        //分成$num 个数组还余多少个元素
        $paremm = $listcount % $num;
        $start = 0;
        $new_array = [];
        for ($i = 0; $i < $num; $i++) {
            $end = $i < $paremm ? $parem + 1 : $parem;
            $new_array[$i] = array_slice($arr, $start, $end);
            $start = $start + $end;
        }
        if($time%2 == 1){
            //固定几率逆向排序
            $new_array = array_reverse($new_array);
        }
        $result = [];
        for ($j = 0; $j < $num; $j++) {
            $increase_num = $time+$j;
            $index = $increase_num % count($new_array[$j]);
            if($increase_num%3 == 1){
                //固定几率逆向排序
                $new_array[$j] = array_reverse($new_array[$j]);
            }
            $result[] = $new_array[$j][$index];
        }
    
        return $result;
    }
    
    //使用方法
    $time = isset($_GET['time'])?$_GET['time']:123456789;
    $arr = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30];
    $test1 = getRandFixedData($arr,5,$time);
    echo '<pre>';
    print_r($test1);
    
    $data = [1,2];
    foreach ($data as $k=>$v){
        $test2 = getRandFixedData($arr,5,$time+$k);
        echo '<pre>';
        print_r($test2);
    }
    
    die;
  • 相关阅读:
    swift 动画
    WCF身份验证二:基于消息安全模式的自定义身份验证
    WCF身份验证一:消息安全模式之<Certificate>身份验证
    SQL Server 事务与锁
    C# 6.0 的新特性
    SQL Cursor 游标的使用
    C# 几种读取MAC地址的方法
    C# 获取方法所在的 命名空间 类名 方法名
    SQL Server 日志清除
    C# 利用WMI对象获取物理内存和可用内存大小
  • 原文地址:https://www.cnblogs.com/-mrl/p/10173912.html
Copyright © 2011-2022 走看看