PHP关联数组的10个操作技巧


Posted in PHP onJanuary 21, 2013

什么是数组?
在使用 PHP 进行开发的过程中,或早或晚,您会需要创建许多相似的变量。
无需很多相似的变量,你可以把数据作为元素存储在数组中。
数组中的元素都有自己的 ID,因此可以方便地访问它们。
关联数组
关联数组,它的每个 ID 键都关联一个值。
在存储有关具体命名的值的数据时,使用数值数组不是最好的做法。
通过关联数组,我们可以把值作为键,并向它们赋值。
这篇文章将介绍10个操作PHP关联数组的技巧,熟练运用能帮助你提高开发效率。
1、添加数组元素
PHP是一种弱类型语言,这意味着你不需要显示声明一个数组及其大小,相反,你可以同时声明并填充数组。
$capitals = array(
'Alabama' => 'Montgomery',
'Alaska' => 'Juneau',
'Arizona' => 'Phoenix'
); 额外的数组元素可以象下面这样追加:
$capitals['Arkansas'] = 'Little Rock'; 如果你正在处理数字索引数组,你可能想使用显示命名的函数前置和追加元素,如array_push()和array_unshift()函数,但这些函数不能操作关联数组。
2、删除数组元素
如果要从数组中删除一个元素,请使用unset()函数,如:
unset($capitals['California']); 使用数字索引数组时,删除数组元素的办法更多,更灵活,可以使用array_shift()和array_pop()函数分别从数组的开头和末尾删除一个元素。
3、交换键和值
假设你想创建一个名叫$states的新数组,使用州府作为索引,使用州名作为关联值,使用array_flip()函数很容易完成这个任务。

$capitals = array( 
'Alabama' => 'Montgomery', 
'Alaska' => 'Juneau', 
'Arizona' => 'Phoenix' 
); 
$states = array_flip($capitals); 
// $states = array( 
// 'Montgomery' => string 'Alabama', 
// 'Juneau' => string 'Alaska', 
// 'Phoenix' => string 'Arizona' 
// );

4、合并数组
假设前面的数组由一个基于Web的“FlashCard”服务使用,你想提供一种方法测试学生对美国各州首府的掌握情况,你可以使用array_merge()函数合并包含州和首府的数组。
$stateCapitals = array( 
'Alabama' => 'Montgomery', 
'Alaska' => 'Juneau', 
'Arizona' => 'Phoenix' 
); 
$countryCapitals = array ( 
'Australia' => 'Canberra', 
'Austria' => 'Vienna', 
'Algeria' => 'Algiers' 
); 
$capitals = array_merge($stateCapitals, $countryCapitals);

5、编辑数组值
假设在数组中的数据包含大小写错误,在插入到数据库之前,你想纠正这些错误,你可以使用array_map()函数给每个数组元素应用一个回调。
function capitalize($element) 
{ 
$element = strtolower($element); 
return ucwords($element); 
} 
$capitals = array( 
'Alabama' => 'montGoMEry', 
'Alaska' => 'Juneau', 
'Arizona' => 'phoeniX' 
); 
$capitals = array_map("capitalize", $capitals);

6、按键对数组排序
FlashCard程序常常使用各种排序,如按字母顺序排序,你可以使用ksort()函数按键对关联数组进行排序。
$capitals = array( 
'Arizona' => 'Phoenix', 
'Alaska' => 'Juneau', 
'Alabama' => 'Montgomery' 
); 
ksort($capitals);

因为数组是通过参数传递给ksort()函数的,意味着你不再需要将排序结果分配给另一个变量。
7、随机数组排序
在FlashCard程序中还涉及到另一种随机排序技术,这时你要使用shuffle()函数实现数组项目的随机排序。
$capitals = array( 
'Arizona' => 'Phoenix', 
'Alaska' => 'Juneau', 
'Alabama' => 'Montgomery' 
); 
shuffle($capitals);

如果不需要打乱数组顺序,你只是想随机选择一个值,那么使用array_rand()函数即可。
8、确定键和值是否存在
你可以使用in_array()函数确定一个数组元素是否存在。
$capitals = array( 
'Arizona' => 'Phoenix', 
'Alaska' => 'Juneau', 
'Alabama' => 'Montgomery' 
); 
if (in_array("Juneau", $capitals)) 
{ 
echo "Exists!"; 
} else { 
echo "Does not exist!"; 
}

很少有人知道这个函数也可以确定一个数组键是否存在,在这一点上,它和array_key_exists()函数的功能一样。
$capitals = array( 
'Arizona' => 'Phoenix', 
'Alaska' => 'Juneau', 
'Alabama' => 'Montgomery' 
); 
if (array_key_exists("Alaska", $capitals)) 
{ 
echo "Key exists!"; 
} else { 
echo "Key does not exist!"; 
}

9、搜索数组
你可能想搜索数组资源,这样用户就可以方便地用一个特定的州府检索关联的州,可以通过array_search()函数实现数组搜索。
$capitals = array( 
'Arizona' => 'Phoenix', 
'Alaska' => 'Juneau', 
'Alabama' => 'Montgomery' 
); 
$state = array_search('Juneau', $capitals); 
// $state = 'Alaska'

10、标准PHP库
标准PHP库(Standard PHP Library,SPL)为开发人员提供了许多数据结构,迭代器,接口,异常和其它以前PHP语言没有的功能,使用这些功能可以通过面向对象的语法遍历数组。
$capitals = array( 
'Arizona' => 'Phoenix', 
'Alaska' => 'Juneau', 
'Alabama' => 'Montgomery' 
); 
$arrayObject = new ArrayObject($capitals); 
foreach ($arrayObject as $state => $capital) 
{ 
printf("The capital of %s is %s<br />", $state, $capital); 
} 
// The capital of Arizona is Phoenix 
// The capital of Alaska is Juneau 
// The capital of Alabama is Montgomery

这仅仅是SPL众多伟大功能中的一个,一定要阅读PHP文档了解更多信息。
PHP 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
php 正则匹配函数体
Aug 25 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
PHP图片处理类 phpThumb参数用法介绍
Mar 11 PHP
编写安全 PHP应用程序的七个习惯深入分析
Jun 08 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
PHP内核探索:哈希表碰撞攻击原理
Jul 31 PHP
php邮箱地址正则表达式验证
Nov 13 PHP
php版微信公众号接口实现发红包的方法
Oct 14 PHP
Ajax+PHP实现的分类列表框功能示例
Feb 11 PHP
php中pcntl_fork创建子进程的方法实例
Mar 14 PHP
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
Jan 19 #PHP
PHP中CURL方法curl_setopt()函数的参数分享
Jan 19 #PHP
php牛逼的面试题分享
Jan 18 #PHP
APACHE的AcceptPathInfo指令使用介绍
Jan 18 #PHP
php图片加水印原理(超简单的实例代码)
Jan 18 #PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 #PHP
在windows服务器开启php的gd库phpinfo中未发现
Jan 13 #PHP
You might like
针对初学PHP者的疑难问答(1)
2006/10/09 PHP
mac下安装nginx和php
2013/11/04 PHP
php中出现空白页的原因及解决方法汇总
2014/07/08 PHP
PHP图片库imagemagick安装方法
2014/09/23 PHP
PHP中预定义的6种接口介绍
2015/05/12 PHP
简单解析PHP程序的运行流程
2016/06/23 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
2016/06/07 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
浅谈Javascript中的函数、this以及原型
2016/10/09 Javascript
JQuery学习总结【一】
2016/12/01 Javascript
jQuery动态产生select option下拉列表
2017/03/15 Javascript
Node.js之网络通讯模块实现浅析
2017/04/01 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
vue微信分享的实现(在当前页面分享其他页面)
2019/04/16 Javascript
微信小程序云开发如何实现数据库自动备份实现
2019/08/16 Javascript
vue 解除鼠标的监听事件的方法
2019/11/13 Javascript
npx create-react-app xxx创建项目报错的解决办法
2020/02/17 Javascript
原生js实现分页效果
2020/09/23 Javascript
[01:15:18]2014 DOTA2国际邀请赛中国区预选赛 LGD VS Speed Gaming.cn
2014/05/22 DOTA
python xml解析实例详解
2016/11/14 Python
python实现Adapter模式实例代码
2018/02/09 Python
基于python实现简单日历
2018/07/28 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
html5使用canvas实现图片下载功能的示例代码
2017/08/26 HTML / CSS
下面代码从性能上考虑,有什么问题
2015/04/03 面试题
2014年学习雷锋活动总结
2014/03/01 职场文书
干部竞争上岗演讲稿
2014/09/11 职场文书
小学音乐教师个人工作总结
2015/02/05 职场文书
限期整改通知书
2015/04/22 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js