PHP学习之数组Array操作和键值对操作函数(一)
PHP 中的数组实际上是一个有序映射。映射是一种把 values关联到 keys 的类型。此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。
在PHP中,数组的每个元素都是由“键=>值”组成的,通过元素的键来访问对应的键的值。“关联数组”指的是键名为字符串的数组,“索引”和“键名“指的是同一样东西。”索引“多指数组的数字形式的下标。使用数组的处理函数,可以很方便的对数组中的每个元素的键和值进行操作。
1定义数组array()
可以用array()结构来新建一个数组,接受任意数量用逗号分隔的 键(key)=>值(value)对,其中键(key)可以是一个整数integer或者字符string,值(value)可以使任意类型的值。自PHP5.4起可以使用短数组定义语法,用[]替代array()。
<?php
$array=array(
"foo"=>"bar",
"bar"=>"foo"
); $array=[ //自从PHP5.4以后。
"foo"=>"bar",
"bar"=>"foo",
];
?>
key还会有如下的强制转换:
- 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08"则不会强制转换,因为其不是一个合法的十进制数值。
- 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
- 布尔值也会被转换成整型。即键名 true 实际会被储存为 1而键名 false 会被储存为 0。
- Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。
- 数组和对象不能被用为键名。坚持这么做会导致警告:Illegal offset type。
- 如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
?> 以上例子会输出: array(1) {
[1]=>
string(1) "d"
} 还可以只对某些单元指定键名而对其它的空置: <?php
$array = array(
"a",
"b",
6 => "c",
"d",
);
var_dump($array);
?> 以上例子输出 array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[6]=>
string(1) "c"
[7]=>
string(1) "d"
}
自PHP 5.4 起可以用数组间接引用函数或方法调用的结果。之前只能通过一个临时变量,自 PHP 5.5 起可以用数组间接引用一个数组原型。
<?php
function getArray() {
return array(1, 2, 3);
} // on PHP 5.4
$secondElement = getArray()[1]; // previously
$tmp = getArray();
$secondElement = $tmp[1]; // or
list(, $secondElement) = getArray();
?>
要修改某个值,通过其键名给该单元赋一个新值。要删除某键值对,对其调用 unset() 函数。
<?php
$arr = array(5 => 1, 12 => 2); $arr[] = 56; //相当于增加了一个$arr[13] = 56; $arr["x"] = 42; //增加一个新元素,键key=’x‘ unset($arr[5]); //删除数组中5=>1 unset($arr); // 删除整个数组
?>
如果给出方括号但没有指定键名,则取当前最大整数索引值,新的键名将是该值加上 1(但是最小为 0)。如果当前还没有整数索引,则键名将为 0。注意这里所使用的最大整数键名不一定当前就在数组中。它只要在上次数组重新生成索引后曾经存在过就行了。以下面的例子来说明:
<?php
// 创建一个简单的数组
$array = array(1, 2, 3, 4, 5);
print_r($array); // 现在删除其中的所有元素,但保持数组本身不变:
foreach ($array as $i => $value) {
unset($array[$i]);
}
print_r($array); // 添加一个单元(注意新的键名是 5,而不是你可能以为的 0)
$array[] = 6;
print_r($array); // 重新索引:
$array = array_values($array);
$array[] = 7;
print_r($array);
?>
以上例子会有如下输出: Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
Array
(
)
Array
(
[5] => 6
)
Array
(
[0] => 6
[1] => 7
)
2.is_array()
is_array — 检测变量是否是数组,bool is_array ( mixed $var
),如果 var
是 array,则返回 TRUE
,否则返回 FALSE.
3.explode()
explode——使用一个字符串分割另一个字符串。array explode ( string $delimiter
, string $string
[, int $limit
] ),此函数返回由字符串组成的数组,每个元素都是 string
的一个子串,它们被字符串 delimiter
作为边界点分割出来。delimiter 边界上的分割字符,string输入的字符串,如果设置了 limit
参数并且是正数,则返回的数组包含最多 limit
个元素,而最后那个元素将包含 string
的剩余部分。如果 limit
参数是负数,则返回除了最后的 -limit
个元素外的所有元素。如果 limit
是 0,则会被当做 1。
<?php
$str = 'one|two|three|four'; // 正数的 limit
print_r(explode('|', $str, 2)); // 负数的 limit(自 PHP 5.1 起)
print_r(explode('|', $str, -1));
?> 以上例子会有如下输出 Array
(
[0] => one
[1] => two|three|four
)
Array
(
[0] => one
[1] => two
[2] => three
)
4.implode()
implode — 将一个一维数组的值转化为字符串
<?php $array = array('lastname', 'email', 'phone');
$comma_separated = implode(",", $array); echo $comma_separated; // lastname,email,phone // 当数组为空时,返回的字符串也是空
var_dump(implode('hello', array())); // string(0) "" ?>
5.split
split — 用正则表达式将字符串分割到数组中,array split ( string $pattern
, string $string
[, int $limit
] ),本函数返回一个字符串数组,每个单元为 string
经区分大小写的正则表达式 pattern
作为边界分割出的子串。如果设定了 limit
,则返回的数组最多包含 limit
个单元,而其中最后一个单元包含了 string
中剩余的所有部分。如果出错,则 split() 返回 FALSE
。
<?php
// 分隔符可以是斜线,点,或横线
$date = "04/30/1973";
list($month, $day, $year) = split ('[/.-]', $date);
echo "Month: $month; Day: $day; Year: $year<br />\n";
?>
6.preg_split()
preg_split — 通过一个正则表达式分隔字符串,array preg_split ( string $pattern
, string $subject
[, int $limit
= -1 [, int $flags
= 0 ]] ),pattern
用于搜索的模式,字符串形式。subject
输入字符串
limit
如果指定,将限制分隔得到的子串最多只有limit
个,返回的最后一个 子串将包含所有剩余部分。limit
值为-1, 0或null时都代表"不限制", 作为php的标准,你可以使用null跳过对flags
的设置。
PHP学习之数组Array操作和键值对操作函数(一)的更多相关文章
- PHP 二维数组按某一个键值排序
一.前言 在某个项目中,需要读取某个文件夹下的所有文件,在本地的 Windows 环境下时,读取出来的二维数组的文件名称和在 Windows 文件夹的文件排序一致, 但是项目上线后,环境为 Linux ...
- Redis源码解析:09redis数据库实现(键值对操作、键超时功能、键空间通知)
本章对Redis服务器的数据库实现进行介绍,说明Redis数据库相关操作的实现,包括数据库中键值对的添加.删除.查看.更新等操作的实现:客户端切换数据库的实现:键超时相关功能的实现.键空间事件通知等. ...
- 仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大
仵航说 Vue用replace修改数组中对象的键值或者字段名 仵老大 1.介绍 先看图 今天在项目中遇到了一个问题,例如我现在需要传一些数据到后端,数组例如是 let arr = [ {" ...
- php usort 按照数组中的某个键值排序
//php usort 按照数组中的某个键值排序 如果第一个参数小于第二个参数 -> 返回小于0的整数如果第一个参数等于于第二个参数 -> 返回等于0的整数如果第一个参数大于于第二个参数 ...
- Spark基础:(三)Spark 键值对操作
1.pair RDD的简介 Spark为包含键值对类型的RDD提供了一些专有的操作,这些RDD就被称为pair RDD 那么如何创建pair RDD呢? 在不同的语言中有着不同的创建方式 在pytho ...
- Spark学习之键值对操作总结
键值对 RDD 是 Spark 中许多操作所需要的常见数据类型.键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式.键值对 RDD ...
- Spark学习笔记3:键值对操作
键值对RDD通常用来进行聚合计算,Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为pair RDD.pair RDD提供了并行操作各个键或跨节点重新进行数据分组的操作接口. S ...
- Javascript 学习之数组 Array
数组在Javascript中占有很重要的地位.任何控件开发离不开数组的使用. 构造函数 new Array( ) new Array(size) new Array(element0, element ...
- 学习Swift -- 数组(Array) - 持续更新
集合类型--数组 Array是Swift中的一种集合类型:数组,数组是使用有序列表储存同一类型的多个值,与OC的NSArray的最大不同是,Swift的数组是值类型,OC的数组是引用类型 声明数组的方 ...
随机推荐
- 解释一下python中的继承
当一个类继承另一个类,它就被称为一个子类/派生类,继承父类/基类/超类.它会继承/获取所有类成员(属性和方法) 继承能让我们重新使用代码,也能更容易的创建和维护应用 单继承:一个类继承单个基类 多继承 ...
- JQuery Div层滚动条控制(模拟横向滚动条在最顶端显示)
想让DIV层滚动条显示在顶端,CSS样式没找到相关属性,于是用2个DIV层来模拟做了一个.经测试IE浏览器上显示并不太美观!不知道是否还有更好的办法可以实现这功能呢? aaaaaaasssssss ...
- OpenCV图片拼接的两种方法
https://my.oschina.net/xiaot99/blog/226589 一.原图 1.jpg 2.jpg ...
- VoLTE的前世今生...说清楚VoIP、VoLTE、CSFB、VoWiFi、SIP、IMS那些事...
转:https://mp.weixin.qq.com/s?__biz=MzA3MTA3OTIwMw==&mid=401344844&idx=1&sn=497b351f524af ...
- HA 脑裂原理
HA 脑裂原理 “裂脑”,乃一个形象的术语,系HA系统危机情景. 引子:“裂脑”是治疗“癫痫”病的一种手术.医生们认为癫痫病发作是由于大脑“异常放电”所至.为了阻止“异常放电”波及整个大脑(左.右半脑 ...
- poj 1703 Find them, Catch them 【并查集 新写法的思路】
题目地址:http://poj.org/problem?id=1703 Sample Input 1 5 5 A 1 2 D 1 2 A 1 2 D 2 4 A 1 4 Sample Output N ...
- POI技术实现对excel的导出
需求:客户端传来两个参数,当前页码和每页的条数,根据传来的参数实现对数据的导出 1.导入依赖 <!-- 报表相关 --> <dependency> <groupId> ...
- HMM代码实现
按照网上的代码,自己敲了一下,改了一点点,理解加深了一下. 还有训练HMM的EM算法没看懂,下次接着看: 参考连接:http://www.cnblogs.com/hanahimi/p/4011765. ...
- centos7下安装tomcat7
1 安装说明安装环境:CentOS-7.0.1611安装方式:源码安装软件:apache-tomcat-7.0.75.tar.gz 下载地址:http://tomcat.apache.org/down ...
- 利用CXF框架开发webservice
开发服务端代码 1. web.xml文件中添加cxf的servlet 2. 定义接口 @WebService(targetNamespace="http://UserInfo.ws.com& ...