一、数组的定义与访问
1. 数组的定义
- 创建数组 $staff = []
- 索引数组以追加的方式添加,默认从0开始递增
- 关联数组,访问键,是字符串,有语义化的,与位置无关,只与键名相关
- 多维数组,二维用的最多
<?php
// 创建数组
$staff = [];
// 1.索引数组,以追加的方式添加
$staff[] = '20';
$staff[] = 'abc';
$staff[] = '123@qq.com';
printf('<pre>%s</pre>', print_r($staff, true));
// 2.关联数组
$staff = [];
$staff['id'] = '20';
$staff['name'] = 'abc';
$staff['email'] = '123@qq.com';
printf('<pre>%s</pre>', print_r($staff, true));
// 3.多维数组,二维用的最多
$users = [
['id' => 1, 'name' => '小明', 'age' => 20],
['id' => 2, 'name' => '小李', 'age' => 21],
['id' => 3, 'name' => '小刘', 'age' => 22],
];
printf('<pre>%s</pre>', print_r($users, true));
// 4.如何拿到小刘?
echo $users[2]['name'];
2. 获取数组与访问
- 用parse_str查询字符串,只获取内容:id=1&name=admin&role=1
- 代码如下:
print_r($_SERVER['QUERY_STRING']);
echo '<hr>';
parse_str($_SERVER['QUERY_STRING'], $queryArr);
print_r($queryArr);
echo '<hr>';
print_r(parse_url('http: //php.edu/0710/demo1.php?id=1&name=admin&role=1'));
echo '<hr>';
print_r(parse_url('http: //php.edu/0710/demo1.php?id=1&name=admin&role=1')['query']);
二、数组的遍历,使用指针,for/whie,foreach,list的用法
1. 使用数组指针,逐个遍历
- current():获取当前位置的数组元素的值value
- key():获取当前key
- 代码如下:
$stu = ['id' => '01', 'name' => '小芳', 'age' => 20, 'course' => 'php', 'grade' => 99];
// 拿键和拿值
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
// 访问完成之后,指针手工后移
next($stu);
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
// 指针前移
prev($stu);
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
// 直接访问最后一个
end($stu);
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
// 指针复位,回到第一个
reset($stu);
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
2. while,for,foreach举例来遍历数组,获取值
// 1.用while循环来实现遍历
$stu = ['id' => '01', 'name' => '小芳', 'age' => 20, 'course' => 'php', 'grade' => 99];
reset($stu);
while (true) {
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
if (next($stu)) continue;
else break;
}
echo '<hr>';
// 2.用for循环来实现遍历关联数组
reset($stu);
for ($i = 0; $i < count($stu); $i++) {
printf('[\'%s\']=>%s<br>', key($stu), current($stu));
next($stu);
}
echo '<hr>';
// 3.foreach循环来实现遍历关联数组,推荐使用
// 不用指针复位;不用手工移动,自动后移
$stu = ['id' => '01', 'name' => '小芳', 'age' => 20, 'course' => 'php', 'grade' => 99];
// 用key取键,用value取值
foreach ($stu as $key => $value) {
echo "['{$key}'] =>$value <br>";
}
3. 如果值为数组,共3类课程,如何打印?
$stu = ['id' => '01', 'name' => '小芳', 'age' => 20, 'course' => ['php', 'js', 'css'], 'grade' => 99];
foreach ($stu as $value) {
echo is_array($value) ? print_r($value, true) : $value;
}
4. list():针对索引数组和关联数组,解析/解构
// 1.list():针对索引数组,解析/解构
list($a, $b, $c) = [10, 20, 30];
echo $a, $b, $c;
echo '<hr>';
// 2.list():关联数组,解析/解构
list('lesson' => $lesson, 'grad' => $grad) = ['lesson' => 'html', 'grad' => 90];
echo $lesson, '===>', $grad;
echo '<hr>';
list('id' => $id, 'name' => $name, 'age' => $age) = ['id' => '01', 'name' => '小李', 'age' => 21];
foreach ($users as list('id' => $id, 'name' => $name, 'age' => $age)) {
printf('id=%s, 姓名=%s, 年龄:%s<hr>', $id, $name, $age);
}