PHP5 - 数组 (数值数组 / 关联数组 / 多维数组) 遍历及 array API

声明

在 PHP5 中使用 array() 函数创建声明一个数组:

$arr = array('one', 'two', 'three');

其数组的类型有三种:

  1. 数值数组: 带有数字 ID 键的数组。
  2. 关联数组: 带有指定的键的数组(每个键关联一个值)。
  3. 多维数组: 包含一个或多个数组的数组(二三维)。

获取数组长度

在开始谈三种数组类型前,先来看一下如何获取数组长度。在 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() 使用用户自定义的比较函数对数组中的值进行排序。
发布了264 篇原创文章 · 获赞 408 · 访问量 83万+

猜你喜欢

转载自blog.csdn.net/weixin_44198965/article/details/104361947