操作用户提交数据示例
用户提交的url:
http://127.0.0.1/20200713/1.php?username=%E5%B0%8F%E5%88%9A&email=admin@php.cn
代码示例:
- 案例1:
array_key_exist()
判断用户提交数据是否存在必要字段
echo array_key_exists('username', $_GET) ? '提交成功' : '用户名未提交';
- 案例2:
array_key_first()
获取用户提交的数据中第一个元素的键
echo array_key_first($_GET);
- 案例3:
array_key_last()
获取用户提交的数据中最后一个元素的键
echo array_key_last($_GET);
- 案例4:
array_keys()
获取用户提交数据数组所有键
print_r(array_keys($_GET));
- 案例5:
array_values()
将用户提交的数据的值组成索引数组
print_r(array_values($_GET));
- 案例6:
in_array()
检查用户提交数据中是否存在值’小刚’
echo in_array('小刚', $_GET) ? '用户名存在' : '用户名未提交';
- 案例7:
array_search()
查找用户提交数据的值中是否有admin@php.cn
echo array_search('admin@php.cn', $_GET) ? '邮箱正确' : '邮箱未提交';
- 案例8:
array_unique()
移除数组中重复的值,只保留第一个
$array = ['name' => '小刚', 'name' => '小明', 'email' => 'admin@php.cn'];
print_r(array_unique($array));
- 案例9:
array_sum()
计算数组中数字之和,元素的值数字开头的数字也会计算,不能被计算的字符串记为0
$arr = [5, 10, 20, '200', 'h5'];
echo array_sum($arr);
- 案例10:
array_product()
计算数组中所有值的乘积,不能被计算的字符串记为0
echo array_product($arr);
- 案例11:
array_intersect()
计算数组的交集
print_r(array_intersect($array, $_GET));
栈、队列
- 栈: 是添加与删除受限的一种数据结构,数据的增删仅允许在一端进行, LIFO,最后进最先出
用户提交的url:
http://127.0.0.1/20200713/2.php?username=%E5%B0%8F%E5%88%9A&email=admin@php.cn
- 案例1:array_push()将数组当成一个栈,并将传入的变量压入数组的末尾。
$token = sha1(md5('小刚'));
array_push($_GET, $token);
print_r($_GET);
- 案例2:array_pop()弹出并返回 array 数组的最后一个单元,并将数组 array 的长度减一。
使用此函数后会重置(reset())array 指针。
echo array_pop($_GET);
- 案例3:array_unshift() 将传入的数组单元插入到数组的开头。
$key = sha1(md5('小刚'));
array_unshift($_GET, $key);
print_r($_GET);
- 案例4:array_shift()将数组的第一个单元移出并作为结果返回
echo array_shift($_GET);
print_r($_GET);
数组排序
- 先定义一个数组
$array = [5, 10, 15, 20, 11, 2, '66l', 'Po'];
- 案例1:
sort()
对数组进行排序。当本函数结束时数组单元将被从最低到最高重新安排。
var_dump(sort($array));
print_r($array);
- 案例2:
asort()
对数组进行排序并保持索引关系
var_dump(asort($array));
print_r($array);
- 案例3:
arsort()
对数组进行逆向排序并保持索引关系
var_dump(arsort($array));
print_r($array);
- 案例4:
ksort()
对数组按照键名排序
var_dump(ksort($array));
print_r($array);
- 案例5:
krsort()
对数组按照键名逆向排序
var_dump(krsort($array));
print_r($array);
- 案例6:
usort()
使用用户自定义的比较函数对数组中的值进行排序
function arr()
{
$arr = [5, 10, 15, 20, 11, 2, '66l', 'Po'];
$arr1 = [5, 10, 15, 20, 11, 2, '66l', 'Po'];
return $arr == $arr1 ? 0 : -1;
}
var_dump(usort($array, 'arr'));
print_r($array);
echo 'usort';
- 案例7:
uasort()
使用用户自定义的比较函数对数组中的值进行排序并保持索引关联
var_dump(uasort($array, 'arr'));
print_r($array);
echo 'uasort';
- 案例8:
uksort()
使用用户自定义的比较函数对数组中的键名进行排序
var_dump(uksort($array, 'arr'));
print_r($array);
echo 'uksort';
- 案例9:
natsort()
用“自然排序”算法对数组排序
var_dump(natsort($array));
print_r($array);
- 案例10:
natcasesort()
用“自然排序”算法对数组进行不区分大小写字母的排序
var_dump(natcasesort($array));
print_r($array);
数组增删改
- 用户提交的url:
http://127.0.0.1/20200713/4.php?name=%E5%B0%8F%E5%88%9A&age=18&sex=%E7%94%B7&email=admin@php.cn
- 案例1:
array_slice()
返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。
print_r(array_slice($_GET, 2, 6));
print_r(array_slice($_GET, -1, 3));
- 案例2:
array_splice()
操作数组案例:
$array = ['小刚', 18, '男', '180cm'];
// 增:利用删除长度为0的方法新增元素
// 由于被删除的元素长度为0,所以返回空数组
print_r(array_splice($array, 1, 0, ['name' => '小明', '年龄' => 28]));
print_r($array);
// 删除数组中的一部分元素:删除索引1开始的2个元素
// 返回被删除的元素
// print_r(array_splice($array, 1, 2));
// 原数组已改变
// print_r($array);
// 改:去掉数组中的某一部分并用其它值取代
// 返回被提取出的元素,这里['小刚', 18]被替换
// print_r(array_splice($array, 1, 2, ['小明', 20]));
// echo '<br>';
// 原数组已被改变
// print_r($array);
数组合并
- 案例1:
array_combine()
数组合并,将第一个数组的值作为键与第二个数组的值合并成一个数组。
$array1 = ['name', '班级', '容貌'];
$array2 = ['小明', '13期', '神仙颜值'];
$array3 = array_combine($array1, $array2);
print_r($array3);
- 案例2:
array_merge()
将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。
返回作为结果的数组。
$array4 = array_merge($array1, $array2);
print_r($array4);
回调
- 案例1:
array_filter()
,将元素转换后为false的值全部过滤掉
回调函数结果为数组
$array = [150, 'php', true, [4, 5, 6], (new class
{
}), [], null, false, '', 0, '0'];
$get = array_filter($array);
$get = array_filter($array, function ($item) {
// 返回传入的元素
// return $item;
// is_scalar()检测数组中的元素是否是标量
// 标量变量是指那些包含了 integer、float、string 或 boolean的变量,而 array、object 和 resource 则不是标量。
return is_scalar($item);
// 检测数组中的元素是否是数组
// return is_array($item);
});
print_r($get);
- 案例2:
array_map()
为数组的每个元素应用回调函数
返回新数组
$get = array_map(function ($item) {
// 判断数组的每个元素类型是否数组
return gettype($item) == 'array' ? '是数组' : '不是数组';
}, $array);
print_r($get);
数组与字符串的转换
- 用户提交的url:
url:http://127.0.0.1/20200713/7.php?name=%E5%B0%8F%E5%88%9A&age=18&sex=%E7%94%B7&email=admin@php.cn
- 案例1:
implode()
将一个一维数组的值转化为字符串
echo implode($_GET);
- 案例2:
extract()
从数组中将变量导入到当前的符号表
对每个键/值对都会在当前的符号表中建立变量
echo extract($_GET);
echo $name, $age, $sex, $email;
- 案例3:
compact()
建立一个数组,包括变量名和它们的值
$host = '127.0.0.1';
$user = 'admin';
$dbname = 'parse';
print_r(compact('host', 'user', 'dbname'));
总结
数组操作函数的返回值一定要记住;
数组元素操作可以组合数据库连接字符串及查询语句;
用户提交的数据过滤;
掌握数组与字符串的转换技巧;
掌握栈与队列的含义及工作流程。