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 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
PHP4实际应用经验篇(8)
Oct 09 PHP
PHP 杂谈《重构-改善既有代码的设计》之五 简化函数调用
May 07 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
php采用curl实现伪造IP来源的方法
Nov 21 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
php验证码实现代码(3种)
Sep 07 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
php获取指定数量随机字符串的方法
Feb 06 PHP
PHP获取本周所有日期或者最近七天所有日期的方法
Jun 20 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
Jun 13 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中OR与|| AND与&amp;&amp;的区别总结
2013/10/26 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
微信公众号开发之文本消息自动回复php代码
2016/08/08 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
2017/03/14 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
laravel获取不到session的三种解决办法【推荐】
2018/09/16 PHP
js常用函数 不错
2006/09/08 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
用js判断页面是否加载完成实现代码
2012/12/11 Javascript
jQuery实现复选框全选/取消全选/反选及获得选择的值
2014/06/12 Javascript
javaScript知识点总结(必看篇)
2016/06/10 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
微信小程序 基础组件与导航组件详细介绍
2017/02/21 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
nodejs判断文件、文件夹是否存在及删除的方法
2017/11/10 NodeJs
nodejs实现套接字服务功能详解
2018/06/21 NodeJs
利用d3.js力导布局绘制资源拓扑图实例教程
2019/01/08 Javascript
如何在Vue.JS中使用图标组件
2020/08/04 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
[07:54]DOTA2-DPC中国联赛 正赛 iG vs VG 选手采访
2021/03/11 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
python调用Delphi写的Dll代码示例
2017/12/05 Python
对python3 urllib包与http包的使用详解
2018/05/10 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
Python GUI库PyQt5样式QSS子控件介绍
2020/02/25 Python
StubHub澳大利亚:购买或出售您的门票
2019/08/01 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
办理居住证介绍信
2014/01/15 职场文书
美术教师岗位职责
2014/03/18 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
中考百日冲刺决心书
2015/09/22 职场文书
2016年社区六一儿童节活动总结
2016/04/06 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL