数组是什么?
数组是一个能在单个变量中存储多个值的特殊变量,并且您可以根据键访问其中的值。
1. 数组的分类
1.1 索引数组
// 索引数组: 位置敏感,访问严重依赖元素在数组中的位置
// 键是数值的索引,表示元素的位置
//定义方法1:
$user_arr1=[0=>'peter',1=>'朱老师',2=>'灭绝老师',3=>'php.cn'];
//定义方法2:
$user_arr2=['peter','朱老师','灭绝老师','php.cn'];
//定义方法3:
$user_arr3[] = 'peter';
$user_arr3[] = '朱老师';
$user_arr3[] = '灭绝老师';
$user_arr3[] = 'php.cn';
//注意:如果未定义 $user_arr3=[],将自动创建,否则以追加的方式添加;
echo $user_arr1[2];
echo $user_arr2[2];
echo $user_arr3[2];
//输出:灭绝老师
1.2 关联数组
// 关联数组,键的类型是字符串,应该有语义化的
// 关联数组的元素访问与元素在数组中的位置无关,只与它的键名相关
//定义方法1:
$user_arr1 = ['id'=>1, 'name'=>'小明','age'=>18,'email'=>'xiaoming@php.cn'];
//定义方法2:
$user_arr2['id'] = 1;
$user_arr2['name'] = '小明';
$user_arr2['age'] = 18;
$user_arr2['email'] = 'xiaoming@php.cn';
//注意:如果未定义 $user_arr2=[],将自动创建,否则以追加的方式添加;
echo $user_arr1['name'];
echo $user_arr2['name'];
//输出:小明
2. 数组的访问
2.1 通过索引直接访问(或键名)
//索引数组
$user_arr1 = [1, 'peter', 18,'xiaoming@php.cn'];
//关联数组
$user_arr2 = ['id'=>'1', 'name'=>'perer', 'age'=>18,'email'=>'php.cn'];
echo $user_arr1[1];
echo $user_arr2['name'];
//以上均输出:peter
2.2 通过数组指针直接访问
//key():返回数组中的当前元素的键key
//current() - 返回数组中的当前元素的值
//end() - 将内部指针指向数组中的最后一个元素,并输出
//next() - 将内部指针指向数组中的下一个元素,并输出
//prev() - 将内部指针指向数组中的上一个元素,并输出
//reset() - 将内部指针指向数组中的第一个元素,并输出
$user_arr = ['id'=>1, 'name'=>'peter','age'=>18,'email'=>'php.cn];
echo key($user_arr).':'.current($user_arr).'
';
next($user_arr);
echo key($user_arr).':'.current($user_arr).'
';
next($user_arr);
echo key($user_arr).':'.current($user_arr).'
';
next($user_arr);
echo key($user_arr).':'.current($user_arr).'
';
// 输出:
// id:1
// name:peter
// age:18
// email:php.cn
// reset($user_arr);
注意:如果要回到第一个元素,需要使用指针复位: reset()
2.3 通过while()
循环访问
while (true) {
echo key($user_arr).':'.current($user_arr).'
';
if (next($user_arr)){
continue;
}else{
break;
}
}
2.4 通过for()
循环访问(适合索引方式的数组)
$user_arr = [1,'peter',18,'php.cn'];
for ( $i = 0; $i < count($user_arr); $i++ ){
echo $user_arr[$i] . '
';
}
// 输出:
// 1
// peter
// 18
// php.cn
2.5 通过foreach
循环访问(均适用)
$user_arr = ['id'=>1, 'name'=>'peter','age'=>18,'email'=>'php.cn'];
//输出值
foreach ( $user_arr as $value ){
echo $value . '
';
}
// 输出:
// 1
// peter
// 18
// php.cn
//输出键名+值
foreach ( $user_arr as $key => $value ){
echo $key . ':' . $value . '
';
}
// 输出:
// id:1
// name:peter
// age:18
// email:php.cn
2.6 通过foreach
+ list()
循环访问多维数组
$users = [
['id' => '1', 'name' => 'peter', 'age' => 18],
['id' => '2', 'name' => '灭绝老师', 'age' => 18],
['id' => '3', 'name' => '郭靖', 'age' => 18],
];
//list()用于在一次操作中给一组变量赋值
// list($a, $b,$c) = [100,300,500];
// echo $a, $b, $c;
foreach ($users as list('id'=>$id, 'name'=>$name, 'age'=>$age) ) {
printf('id=%s, 姓名=%s, 年龄: %s
', $id, $name, $age);
}
//输出结果:
//id=1,name=peter,age:18
//id=2,name=灭绝老师,age:18
//id=3,name=郭靖,age:18
总结:
- 对于数组的定义有了一个全面的认知,后续得多多使用尽快掌握
- 数组的访问及遍历有多种方法可以操作
- list()遍历方法可以使代码更加简介方便