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

比如我要从1到100这100个数中,随机取数,每次取一个,插入到一条记录中,并且取出来后,保证下次不会再取到,这个代码如何实现?感谢!最好还能算出已经取了几个,剩余几个。... 比如我要从1到100这100个数中,随机取数,每次取一个,插入到一条记录中,并且取出来后,保证下次不会再取到,这个代码如何实现?感谢!
最好还能算出已经取了几个,剩余几个。
展开
 我来答
阳光上的桥
2014-03-31 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65782
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
每次随机取出一个数之后,应该删除这个数,才可以保证下次不取到它。例如你的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能正确运行,数据是字符串、图片、对象都能正确运行。
雨林雨林9876
推荐于2017-11-26 · TA获得超过157个赞
知道小有建树答主
回答量:148
采纳率:0%
帮助的人:160万
展开全部
$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);//删除已经被插入记录中的元素
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wutong
2014-04-01 · 超过53用户采纳过TA的回答
知道小有建树答主
回答量:136
采纳率:76%
帮助的人:85.1万
展开全部
1、先用函数把数组的重复值去掉
2、然后根据下表随机取出一个值
3、然后用函数把这个值删除
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
车鸿许俊德
2019-05-24 · TA获得超过4259个赞
知道大有可为答主
回答量:3048
采纳率:29%
帮助的人:207万
展开全部
最简单的做法,取出后,unset数组里这个数据
事前可以用另一个变量备份赋值下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式