声明
在 PHP5 中使用 array()
函数创建声明一个数组:
$arr = array('one', 'two', 'three');
其数组的类型有三种:
- 数值数组: 带有数字 ID 键的数组。
- 关联数组: 带有指定的键的数组(每个键关联一个值)。
- 多维数组: 包含一个或多个数组的数组(二三维)。
获取数组长度
在开始谈三种数组类型前,先来看一下如何获取数组长度。在 PHP5 中并不是使用 .length
获取,因为 PHP5 中数组不是对象(Object)。
使用 count()
函数来统计数组并返回长度:
# 声明
$arr = array('one', 'two', 'three');
# 返回长度
echo count($arr);//3
一、数值数组
其实就是普通的数组,即 自动分配 ID 键(从 0 开始) :
# 自动分配 ID 键
$arr = array('one', 'two', 'three');
# 手动手配 ID 键
$arr[3] = 'four';
二、关联数组
所谓关联数组,指的是你 分配给数组的指定的键 的数组,有点类似对象的键值对。
# 第一种方式
$arr = array('one' => '1', 'two' => '2');
# 第二种方式
$arr['one'] = '1';
$arr['two'] = '2';
三、多维数组
简单来说就是 数组中嵌套数组,它包含一个或多个数组的数组。
# 多维数组
$arr = array(
array('one'),
array('two'),
array('three')
);
# 格式化数组显示
print '<pre>';
print_r($arr);
打印结果:
通过观察数组维度,然后以索引下标方式访问。二维数组需要两个索引来选取元素,反之亦然:
# 二维数组
$arr = array(
array('one'),
array('two'),
array('three')
);
# 选取 'two' 元素
echo $arr[1][0];//two
同样,三维数组则需要 array[一维下标][二维下标][三维下标]
选取元素。
遍历数组
遍历数组的需求很常见,下面我们分别遍历三种数组类型。
使用 for
循环来遍历【数值数组】:
# 数值数组
$arr = array('one', 'two', 'three');
# 遍历
for($i = 0; $i <= count($arr); $i++){
echo $arr[$i];
print '<br>';
}
// one
// two
// three
当然,使用 foreach
来遍历也是可以的。就像下面这样输出 key 与 value:
# 数字数组
$arr = array('one', 'two', 'three');
# 遍历数组
foreach($arr as $key => $value){
echo '索引:' . $key . '——————' . '值:' .$value;
}
// 索引:0——————值:one索引:1——————值:two索引:2——————值:three
使用 foreach
来遍历【关联数组】(注意:PHP5 的 foreach 会拷贝数组建立副本):
语法:foreach($数组变量 as [$下标=>] $值){}
解释:通过 $下标
访问元素下标,通过 $值
访问元素值。
[$下标 =>] 是可选参数。视情况而定。比如关联数组就需要,而数字数组就不需要。
# 关联数组
$arr = array('one' => '1', 'two' => '2');
# 遍历数组
foreach($arr as $key => $value){
echo '键:' . $key . '—————' . '值:' . $value;
}
// 键:one—————值:1键:two—————值:2
通过 嵌套foreach
遍历多维数组,说白了就是逐层遍历:
# 二维数组
$arr = array(
0 => array('name' => 'Vue'),
1 => array('name' => 'React'),
);
# 1. 首先遍历一维数组
# 2. 然后再遍历二维数组
# 注意:如果是三维以上则再次嵌套即可(但不建议三层以上)
foreach($arr as $value){
foreach($value as $value2){
echo $value2 . '<br>';
}
}
// Vue
// React
如果你想了解遍历原理,请访问:https://wangjiabin.blog.csdn.net/article/details/104379573
副本
使用 foreach
遍历数组时,其实系统为我们建立了一个副本,遍历的结果 不会影响到原数组。
# Array
$arr = array(1,2,3);
# 遍历
foreach($arr as $value){
$value += 1;//尝试改变
echo $value;//234
}
# 查看是否改变了元素组
print '<pre>';
print_r($arr);
Array API
函数 | 描述 |
---|---|
array() | 创建数组。 |
array_change_key_case() | 返回其键均为大写或小写的数组。 |
array_chunk() | 把一个数组分割为新的数组块。 |
array_combine() | 通过合并两个数组来创建一个新数组。 |
array_count_values() | 用于统计数组中所有值出现的次数。 |
array_diff() | 返回两个数组的差集数组。 |
array_diff_assoc() | 比较键名和键值,并返回两个数组的差集数组。 |
array_diff_key() | 比较键名,并返回两个数组的差集数组。 |
array_diff_uassoc() | 通过用户提供的回调函数做索引检查来计算数组的差集。 |
array_diff_ukey() | 用回调函数对键名比较计算数组的差集。 |
array_fill() | 用给定的值填充数组。 |
array_filter() | 用回调函数过滤数组中的元素。 |
array_flip() | 交换数组中的键和值。 |
array_intersect() | 计算数组的交集。 |
array_intersect_assoc() | 比较键名和键值,并返回两个数组的交集数组。 |
array_intersect_key() | 使用键名比较计算数组的交集。 |
array_intersect_uassoc() | 带索引检查计算数组的交集,用回调函数比较索引。 |
array_intersect_ukey() | 用回调函数比较键名来计算数组的交集。 |
array_key_exists() | 检查给定的键名或索引是否存在于数组中。 |
array_keys() | 返回数组中所有的键名。 |
array_map() | 将回调函数作用到给定数组的单元上。 |
array_merge() | 把一个或多个数组合并为一个数组。 |
array_merge_recursive() | 递归地合并一个或多个数组。 |
array_multisort() | 对多个数组或多维数组进行排序。 |
array_pad() | 用值将数组填补到指定长度。 |
array_pop() | 将数组最后一个单元弹出(出栈)。 |
array_product() | 计算数组中所有值的乘积。 |
array_push() | 将一个或多个单元(元素)压入数组的末尾(入栈)。 |
array_rand() | 从数组中随机选出一个或多个元素,并返回。 |
array_reduce() | 用回调函数迭代地将数组简化为单一的值。 |
array_reverse() | 将原数组中的元素顺序翻转,创建新的数组并返回。 |
array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名。 |
array_shift() | 删除数组中的第一个元素,并返回被删除元素的值。 |
array_slice() | 在数组中根据条件取出一段值,并返回。 |
array_splice() | 把数组中的一部分去掉并用其它值取代。 |
array_sum() | 计算数组中所有值的和。 |
array_udiff() | 用回调函数比较数据来计算数组的差集。 |
array_udiff_assoc() | 带索引检查计算数组的差集,用回调函数比较数据。 |
array_udiff_uassoc() | 带索引检查计算数组的差集,用回调函数比较数据和索引。 |
array_uintersect() | 计算数组的交集,用回调函数比较数据。 |
array_uintersect_assoc() | 带索引检查计算数组的交集,用回调函数比较数据。 |
array_uintersect_uassoc() | 带索引检查计算数组的交集,用回调函数比较数据和索引。 |
array_unique() | 删除数组中重复的值。 |
array_unshift() | 在数组开头插入一个或多个元素。 |
array_values() | 返回数组中所有的值。 |
array_walk() | 对数组中的每个成员应用用户函数。 |
array_walk_recursive() | 对数组中的每个成员递归地应用用户函数。 |
arsort() | 对数组进行逆向排序并保持索引关系。 |
asort() | 对数组进行排序并保持索引关系。 |
compact() | 建立一个数组,包括变量名和它们的值。 |
count() | 计算数组中的元素数目或对象中的属性个数。 |
current() | 返回数组中的当前元素。 |
each() | 返回数组中当前的键/值对并将数组指针向前移动一步。 |
end() | 将数组的内部指针指向最后一个元素。 |
extract() | 从数组中将变量导入到当前的符号表。 |
in_array() | 检查数组中是否存在指定的值。 |
key() | 从关联数组中取得键名。 |
krsort() | 对数组按照键名逆向排序。 |
ksort() | 对数组按照键名排序。 |
list() | 把数组中的值赋给一些变量。 |
natcasesort() | 用“自然排序”算法对数组进行不区分大小写字母的排序。 |
natsort() | 用“自然排序”算法对数组排序。 |
next() | 将数组中的内部指针向前移动一位。 |
pos() | current() 的别名。 |
prev() | 将数组的内部指针倒回一位。 |
range() | 建立一个包含指定范围的元素的数组。 |
reset() | 将数组的内部指针指向第一个元素。 |
rsort() | 对数组逆向排序。 |
shuffle() | 把数组中的元素按随机顺序重新排列。 |
sizeof() | count() 的别名。 |
sort() | 对数组排序。 |
uasort() | 使用用户自定义的比较函数对数组中的值进行排序并保持索引关联。 |
uksort() | 使用用户自定义的比较函数对数组中的键名进行排序。 |
usort() | 使用用户自定义的比较函数对数组中的值进行排序。 |