php 如何实现,从数组中随机取出数据,还要保证下次不会再取到

比如我要从1到100这100个数中,随机取数,每次取一个,插入到一条记录中,并且取出来后,保证下次不会再取到,这个代码如何实现?感谢!
最好还能算出已经取了几个,剩余几个。

每次随机取出一个数之后,应该删除这个数,才可以保证下次不取到它。例如你的100个数,第一次随机取一个,然后删除它,下次再剩余的99里面随机取一个,这样就不会重复了。

写代码没难度了吧,你写写看,如果希望我继续回答,建议你粘贴一下你写的内容,不完整或者错误没关系,至少你去思考了的,而且我看了代码知道你错在哪里,才可以针对性的讲解。

没空等你写代码了,我把我的贴出来,今天晚上要熬夜加班,没空回来看帖子了,不好意思,希望你认真学习。

<?php
$arr=array();
for ($i=1;$i<=100;$i++) array_push($arr,$i);
print_r($arr);
for ($i=1;$i<=100;$i++){
$n=rand(0,count($arr)-1);//产生随机数,最小值是0,最大值是数组剩余元素可数-1
echo $arr[$n]," ";//显示取的随机数
array_slice($arr,$n,1);//删除刚才取到的数
}
?>追问

非常感谢您的回答,我试了一下,最后的array_slice是不是应该写成array_splice啊?还有,我这里正好是从1到100来举例,如果是50到100的话,$n=rand(0,count($arr)-1);这句代码是不是就不太合适了啊?感谢!

追答

我的代码是运行成功了粘贴上来的,麻烦你粘贴了执行以下,你就知道应该是_slice

另外,希望理解rand函数的参数,这个是产生的随机数范围,作为数字的下标,不能任何修改,数值是500..100能正确运行,数据是字符串、图片、对象都能正确运行。

温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-11-26
$a = range(1,100);
function get_one(&$a){
if(count($a)>=1){
$key=array_rand($a,1);
$value=$a[$key];
unset($a[$key]);
return $value;
}else{
return "都取光了";
}
}
//每次取值可以直接
echo "取到的值:".get_one($a);
echo "<br>还剩:".count($a);追问

感谢您的回答,实际测试不成功啊,因为每次程序执行的时候,数组a都会重新从1到100内选数,unset实际上没有生效啊。

追答

我刚开始以为你这个页面不刷新,如果刷新的话,需要加一个删除功能
$array1= range(1,100);
$array2= array(2,3,5,90);//这个数组的元素,需要从你插入的记录中查取出来
$a= array_diff($array1, $array2);//删除已经被插入记录中的元素

本回答被提问者采纳
第2个回答  2014-04-01
1、先用函数把数组的重复值去掉
2、然后根据下表随机取出一个值
3、然后用函数把这个值删除
第3个回答  2019-05-24
最简单的做法,取出后,unset数组里这个数据
事前可以用另一个变量备份赋值下

php 如何实现,从数组中随机取出数据,还要保证下次不会再取到
range(1,100);function get_one(&$a){ if(count($a)>=1){ key=array_rand($a,1);value=$a[$key];unset($a[$key]);return value;}else{ return "都取光了";} } \/\/每次取值可以直接 echo "取到的值:".get_one($a);echo "还剩:".count($a);

php中怎样从一个数组中随机取一个元素出来呢?
它的用法也很简单:array_rand($arr[, $num])$arr == 用来取元素的数组$num == 随机取下标的个数其中第二个参数 $num 是可选的,默认为1 。注意:它的返回值在第二个参数大于 1 的时候是一个数组;当第二个参数不设或者传值 1 的时候是一个下标。简单的示例代码如下:1、第二个参数不...

PHP中怎么从一个二维数组中随机取出一个值?
回答:用array_rand()函数就可以实现。 array_rand():从数组中随机选出一个或多个元素,并返回。 语法:array_rand(array,number) array:必需。规定输入的数组参数。 number:可选。默认是 1。规定返回多少个随机的元素。 例子:$a = ['a','b','c'];\/\/定义一个二维数组 $b = $array_rand($...

php中如何在数组中随机抽取n个数据的值
它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。 如果你只取出一个,array_rand() 返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。主要是用array_rand()方法 ...

php中如何在数组中随机抽取n个数据的值
它接受 input 作为输入数组和一个可选的参数 num_req,指明了你想取出多少个单元 - 如果没有指定,默认为 1。如果你只取出一个,array_rand()返回一个随机单元的键名,否则就返回一个包含随机键名的数组。这样你就可以随机从数组中取出键名和值。主要是用array_rand()方法 ...

php随机生成数据库中不存在的且不重复数字,在线等!!!
1. 将生成的数字保存到mysql数据库,然后每次生成的号码不能与数据库的数字重复,请问怎么弄?先读取数据库已存在的数字,将结果以数组格式,与rand(1,1000)的数组相比较计算差集,去除这部分数字(array_diff),再shuffle,得到新的随机数。我觉得,你完全可以建立一个序号表,比如,1-1000,每次用时...

[1","2"]"怎么取出数字php?
1、首先新建一个php文件,命名为test.php,用于讲解php如何随机生成1到3的数字。2、在test.php文件中,使用header()方法将页面的编码格式设置为utf-8。3、在test.php文件中,将1至3的数字保存在数组中。4、在test.php文件中,使用shuffle函数打乱数组元素的排序。5、在test.php文件中,使用foreach...

请教一下前辈php如何从一个数组中随机取五个数据(下标和值都要)
给你写个函数:function haha($arr){ $keys=array_rand($arr,5); $re=array(); foreach($keys as $v){ $re[$v]=$arr[$v]; } return $re; }

php从数组中随机取几个元素组成新的数组
1、a = array(1,2,3,4,5,6,7,8,9,10);b = array_rand($a,5);foreach($b as $k=>$v){ arr[]=$a[$v];} print_r($arr);2、arr=$a;shuffle($arr);arr=array_slice($arr,0,5);print_r($arr);

php,如何取出数组中的值,
定义数组: $arr=array(0=>12,1=>23455);定义关联数组时用的是 => 符号,符号左边的键值不加 [ ]要把数组赋值给一个变量才能访问,如:$arr 这时通过键值就可以访问数组中的值了,$arr[0] 就是 12 ,$arr[1] 就是 23455 不指定数组的键值,默认就是0,1,2,3,4,5,……从零...

相似回答