PHP函数shuffle()取数组若干个随机元素的方法分析


Posted in PHP onApril 02, 2016

本文实例讲述了PHP函数shuffle()取数组若干个随机元素的方法。分享给大家供大家参考,具体如下:

有时候我们需要取数组中若干个随机元素(比如做随机推荐功能),那么PHP要如何实现呢?一个比较简单的解决方法是用PHP自带的shuffle()函数。下面举一个简单的例子:

$data[] = array(
    "name" => "三水点靠木",
    "rank" => "40"
);
$data[] = array(
    "name" => "博客园",
    "rank" => "50"
);
$data[] = array(
    "name" => "CSDN",
    "rank" => "60"
);
$data[] = array(
    "name" => "ITEYE",
    "rank" => "50"
);
shuffle($data);
$i = 0;
foreach($data as $key =>$value ){
    if($i < 2) {
        echo $data[$key]['name'].'<br />';
    }
    $i++;
}

shuffle()

shuffle() 函数把数组中的元素按随机顺序重新排列。若成功,则返回 TRUE,否则返回 FALSE。本函数为数组中的单元赋予新的键名,这将删除原有的键名而不仅是重新排序。

如果传入的是关联数组,你会发现关联数组的键名将丢失。顺便这里说一下解决方法:

// 打乱关联数组的排序
function shuffle_assoc($array)
{ 
  $randomized_keys = array_rand($array, count($array)); 
  foreach($randomized_keys as $current_key)
  { 
    $output[$current_key] = $array[$current_key]; 
  } 
  return $output;
}

另外,php还提供了从数组中随机抽取值的函数:array_rand(),其调用格式如下:array_rand(数组,抽取元素的个数); 当然要实现对二维数组的支持还需要封装一下才能使用。但前面的程序就很好支持二维数组。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
一个分页的论坛
Oct 09 PHP
php下intval()和(int)转换使用与区别
Jul 18 PHP
PHP XML操作类DOMDocument
Dec 16 PHP
PHP数组无限分级数据的层级化处理代码
Dec 29 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
ThinkPHP调试模式与日志记录概述
Aug 22 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
php实现PDO中捕获SQL语句错误的方法
Feb 16 PHP
浅谈php(codeigniter)安全性注意事项
Apr 06 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
php ajax confirm 删除实例详解
Mar 06 PHP
laravel5.6实现数值转换
Oct 23 PHP
PHP函数import_request_variables()用法分析
Apr 02 #PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 #PHP
PHP使用http_build_query()构造URL字符串的方法
Apr 02 #PHP
PHP递归实现层级树状展开
Apr 01 #PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 #PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 #PHP
PHP全局变量与超级全局变量区别分析
Apr 01 #PHP
You might like
php 动态执行带有参数的类方法
2009/04/10 PHP
PHP中10个不常见却非常有用的函数
2010/03/21 PHP
PHP设置图片文件上传大小的具体实现方法
2013/10/11 PHP
两级联动select刷新后其值保持不变的实现方法
2014/01/27 PHP
php数据访问之查询关键字
2016/05/09 PHP
php利用gd库为图片添加水印
2016/11/09 PHP
php compact 通过变量创建数组
2016/11/15 PHP
php each 返回数组中当前的键值对并将数组指针向前移动一步实例
2016/11/22 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
2015/12/22 Javascript
基于jquery编写分页插件
2016/03/07 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
jquery实现放大镜简洁代码(推荐)
2017/06/08 jQuery
vue.js todolist实现代码
2017/10/29 Javascript
vue+axios+mock.js环境搭建的方法步骤
2018/08/28 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
一步一步实现Vue的响应式(对象观测)
2019/09/02 Javascript
vue 微信扫码登录(自定义样式)
2020/01/06 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
JS中循环遍历数组的四种方式总结
2021/01/23 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python和shell变量互相传递的几种方法
2013/11/20 Python
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
计算Python Numpy向量之间的欧氏距离实例
2020/05/22 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
美国高端婴童品牌:Hanna Andersson
2016/10/30 全球购物
设计专业毕业生求职信
2014/06/25 职场文书
退休欢送会主持词
2015/07/01 职场文书
JavaScript 语句之常用 for 循环详解
2021/03/29 Javascript
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
redis lua限流算法实现示例
2022/07/15 Redis
centos环境下nginx高可用集群的搭建指南
2022/07/23 Servers