URL处理函数
函数及变量 | 用途 |
---|---|
$_GET |
get方式提交的数据全局变量 |
$_SERVER['QUERY_STRING'] |
全局变量中的QUERY_STRING元素的值就是get方式提交的数据 |
parse_url() |
解析url |
parse_str() |
解析提交的字符串 |
base64_encode() |
加密二进制编码,例如:图片 |
base64_decode() |
解析二进制编码 |
示例:
// URL处理函数
$url = 'http://127.0.0.1/20200710/1.php?id=8&name=admin&type=1';
// $_GET是get方式提交的数据全局变量
print_r($_GET);
echo '<br>';
// $_SERVER全局变量中的QUERY_STRING元素的值就是get方式提交的数据
// print_r($_SERVER);
print_r($_SERVER['QUERY_STRING']);
echo '<br>';
// parse_str()解析提交的字符串
parse_str($_SERVER['QUERY_STRING'], $data);
print_r($data);
echo '<br>';
// parse_url()解析url
print_r(parse_url($url));
echo '<br>';
// base64_encode():加密二进制编码,例如:图片
$pic = base64_encode(file_get_contents('1.jpg'));
echo $pic;
// 可以用html输出到前端(减少http请求,但体积很大)
echo "<img src=\"data:image/jpg;base64,{$pic}\" width=\"100\">";
// 通过编码生成图片文件
file_put_contents('1d.jpg', base64_decode($pic));
加密函数
函数 | 用途 |
---|---|
md5() |
32位16进制编码 |
sha1() |
40位16进制编码 |
md5_file() |
计算文件的 MD5 散列,值随文件变化而变化 |
示例:
// 加密函数
// md5()是32位16进制编码
echo md5('小刚'), '<br>';
// sha1()是40位16进制编码
echo sha1('小刚'), '<br>';
// 经常嵌套使用,可多层嵌套
echo md5(sha1('小刚')), '<br>';
// 通常还会使用私钥
$key = 'name';
echo md5(sha1('小刚' . $key)), '<hr>';
// hash函数md5_file():计算文件的 MD5 散列,值随文件变化而变化
echo md5_file('1.php'), '<br>';
// 将文件的MD5值放入文本文件
file_put_contents('md5.text', md5_file('1.php'));
// 通过比较文件MD5值检测文件是否被更改
echo md5_file('1.php') === file_get_contents('md5.text') ? '文件MD5合法' : '文件MD5非法';
// 在上传文件中可用于验证用户是否重复上传文件
数组函数
数组分类示例:
// 数组分类
// 1.索引数组
$array = [1, 2, 3, 4, 5, 6];
// 索引数组索引是从0开始递增1的,上面的数组相当于:
// $array = [0 => 1, 1 => 2, 2 => 3, 3 => 4, 4 => 5, 5 => 6];
// 格式化打印输出:
printf('<pre>%s</pre>', print_r($array, true));
// 按索引访问,如果索引设置为小数,则自动忽略小数点后的值
echo $array[3], '<br>';
echo $array[1.36], '<br>';
// 2.关联数组
$arr = ['name' => '小刚', 'age' => 18, 'height' => 190, 'sex' => '男'];
echo $arr['name'];
数组创建示例:
// 索引数组
$array = [];
// 追加,系统会自动添加索引
$array[] = '小刚';
$array[] = 18;
printf('<pre>%s</pre>', print_r($array, true));
// 关联数组
$arr['name'] = '小刚';
$arr['age'] = 18;
printf('<pre>%s</pre>', print_r($arr, true));
// 多维数组
$cars = [
['name' => 'lexs', 'type' => 'A', 'color' => 'red'],
['name' => 'benz', 'type' => 'A', 'color' => 'blue'],
['name' => 'honda', 'type' => 'B', 'color' => 'yellow'],
['name' => '宝骏', 'type' => 'C', 'color' => 'green'],
['name' => 'toyota', 'type' => 'B', 'color' => 'black']
];
// 一般不写索引,自动添加索引
printf('<pre>%s</pre>', print_r($cars, true));
// 获取元素
echo $cars[2]['name'];
数组遍历
使用指针逐个遍历
循环遍历
2.1 while循环
2.2 for循环,遍历索引数组
2.3 foreach循环
2.4 list():在一次操作中给一组变量赋值遍历对象
示例:
// 1.使用指针逐个遍历
// 数组访问自第一个元素开始
$car = ['name' => 'honda', 'type' => 'B', 'color' => 'yellow'];
// current():获取指针当前位置的元素值
print_r(current($car));
echo '<br>';
// key():获取指针当前位置的元素键
print_r(key($car));
echo '<br>';
// 打印数组
printf('[\'%s\' => %s]<br>', key($car), current($car));
// next():指针后移
next($car);
printf('[\'%s\' => %s]<br>', key($car), current($car));
// prev():指针前移
prev($car);
printf('[\'%s\' => %s]<br>', key($car), current($car));
// end()指针移到最后
end($car);
printf('[\'%s\' => %s]<br>', key($car), current($car));
// reset()指针复位,回到第一个
reset($car);
printf('[\'%s\' => %s]<br>', key($car), current($car));
// 以上操作比较繁琐,不适用
echo '<hr>';
// 2.循环遍历
reset($car);
// 2.1 while循环
while (true) {
printf('[\'%s\' => %s]<br>', key($car), current($car));
if (next($car)) continue;
else break;
}
// 2.2 for循环,遍历索引数组
$array = [1, 2, 3, 4, 5];
for ($i = 0; $i < count($array); $i++) {
echo $array[$i], '<br>';
}
// for循环,遍历关联数组(不常见)
reset($car);
for ($i = 0; $i < count($car); $i++) {
printf('[\'%s\' => %s]<br>', key($car), current($car));
next($car);
}
// 2.3 foreach循环,有两种语法:
// foreach (array_expression as $value)
// statement
// foreach (array_expression as $key => $value)
// statement
// foreach循环指针自动后移,并且不需要复位
$user = ['id' => 20, 'name' => '小刚', 'type' => 'admin', 'email' => 'admin@php.cn'];
foreach ($user as $key => $value) {
echo "['{$key}'] => {$value} <br>";
}
echo '<hr>';
// 如果有二维数组
$user1 = ['id' => 30, 'name' => '小明', 'type' => ['admin', 'normal', 'mid'], 'email' => 'admin@php.cn'];
foreach ($user1 as $key => $value) {
// 直接输出无法解析二维数组
// echo "['{$key}'] => {$value} <br>";
// is_array()判断是否是数组
echo is_array($value) ? print_r($value, true) : printf('[\'%s\']<br>', key($user1), current($user1)), '<br>';
}
echo '<hr>';
$data = [
['name' => 'lexs', 'type' => 'A', 'color' => 'red'],
['name' => 'benz', 'type' => 'A', 'color' => 'blue'],
['name' => 'toyota', 'type' => 'B', 'color' => 'black']
];
foreach ($data as $dat) {
foreach ($dat as $key => $value) {
echo "['{$key}'] => $value <br>";
}
}
echo '<hr>';
foreach ($data as $dat) {
printf('name:%s, type:%s, color:%s<br>', $dat['name'], $dat['type'], $dat['color']);
}
echo '<hr>';
// 2.4 list():在一次操作中给一组变量赋值
// 可用于解构索引数组
$arr = [1, 2, 3];
list($a, $b, $c) = $arr;
echo $a, $b, $c;
// 在7.0+版本可解构关联数组
$arr1 = ['name' => 'lexs', 'type' => 'A', 'color' => 'red'];
list('name' => $name, 'type' => $type, 'color' => $color) = $arr1;
echo $name . ':' . $color, '<br>';
foreach ($data as list('name' => $name, 'type' => $type, 'color' => $color)) {
printf('名称:%s,等级:%s,颜色:%s', $name, $type, $color);
}
echo '<hr>';
// 3.遍历对象
$obj = new stdClass;
$obj->name = '小刚';
$obj->age = 18;
$obj->sex = '男';
foreach ($obj as $attr => $value) {
echo $attr . ':' . $value . '<br>';
}
总结
掌握加密函数的嵌套使用和私钥使用;
掌握索引数组和关联数组的遍历方式;
重点掌握foreach循环遍历数组与对象。