如何将一个数组乱序?

前几天php实习面试,问到一个问题:如何将一个数组乱序?
答:使用自带的array_rand()或者shuffle()函数,或者用随机数取值赋值给新的数组。
又问:万一一直随机到同一个数怎么办?
那就进行判断,如果已经取过的位置,重新选取随机数。
这样问题就来了:随着新数组长度增加,原数组中的随机数选取碰撞几率会原来越大,最后几乎是一直碰撞的。也没有想出更好的办法。

后来回家后查了一下,总结一下,有以下几种方法:

  1. 使用自带的函数
function shuffle_rand1($arr)
{
    echo "原来数组为:";
    print_r($arr);
    shuffle($arr);
    echo "<br>乱序数组为:";
    print_r($arr);
}
  1. 第一时间想到的方法,就是随机取值,赋值给新的数组
function shuffle_rand2($arr)
{
    echo "原来数组为:";
    print_r($arr);
    $len = count($arr);
    $shuffle_arr = array();
    while(count($shuffle_arr)<$len){
        $index = rand(0,$len-1);
        if(!in_array($index, $shuffle_arr)){
            $shuffle_arr[] = $index;
        }
    }
    $newarr = array();
    foreach ($shuffle_arr as $v) {
        $newarr[] = $arr[$v];
    }
    echo "<br>新的数组为:";
    print_r($newarr);
}
  1. 数组中随机取一个元素赋值给新的数组,然后将原数组最后一位赋值到该位置,数组长度减一,继续重复上述步奏
function shuffle_rand3($arr)
{
    echo "原来数组为:";
    print_r($arr);
    $len = count($arr);
    $shuffle_arr = array();
    while($len>0){
        $index = rand(0,$len-1);
        $shuffle_arr[] = $arr[$index];
        $arr[$index] = $arr[$len-1];
        $len--;
    }
    echo "<br>新的数组为:";
    print_r($shuffle_arr);
}
  1. 在具有n个元素的数组中,对0到n-1一次进行与一个随机位置元素进行交换,这种方法不需要新建一个数组,直接在原数组中进行
function shuffle_rand4($arr){
    echo "原来数组为:";
    print_r($arr);
    $len = count($arr);
    for($i=0;$i<$len;$i++){
        $index = rand(0,$len-1);
        $temp = $arr[$i];
        $arr[$i] = $arr[$index];
        $arr[$index] = $temp;
    }
    echo "<br>新的数组为:";
    print_r($arr);
}

转载于:https://www.cnblogs.com/pengwenwu/p/6222159.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值