批改状态:合格
老师批语:数组函数虽然多, 常用的并不多, 并且有不少功能是重复的, 完全掌握并不难的
$arr = ['id'=>10, 'name'=>'小明', 'sex'=>'男'];// 获取数组中的键名// 1.手动获取echo key($arr),'<br>';next($arr);echo key($arr),'<br>';next($arr);echo key($arr),'<br>';echo '<hr>';// 2.while循环获取reset($arr);while(key($arr)){$a[] = key($arr);next($arr);}echo "<pre>".print_r($a,true)."</pre><hr>";// 3.使用系统函数array_keys()获取键名echo "<pre>".print_r(array_keys($arr),true)."</pre><hr>";// 4.array_key_exists()函数判断键名是否存在echo array_key_exists('sex',$arr)? '键名存在': '键名不存在','<br>';echo array_key_exists('age',$arr)? '键名存在': '键名不存在','<hr>';// 5.获取数组第一个或者最后一个的键名(主要用于数组内数据多的时候操作)// 获取第一个键名echo array_key_first($arr),'<br>';// 获取最后一个键名echo array_key_last($arr),'<hr>';

// 获取数组中的值// 1.foreach()函数foreach ($arr as $value) {$v[] = $value;}echo "<pre>" . print_r($v, true) . "</pre><hr>";// 2.用系统函数array_values()获取echo "<pre>" . print_r(array_values($arr), true) . "</pre><hr>";// 3.判断值是否存在echo in_array('html', $arr) ? '值存在' : '值不存在', '<br>';echo in_array('css', $arr) ? '值存在' : '值不存在', '<br>';// 4.根据值获取键名(如果存在返回键名,如果不存在返回false)var_dump(array_search('php', $arr));var_dump(array_search('php1', $arr));// 5.去除数组中相同的值echo "<pre>" . print_r(array_unique($arr), true) . "</pre>";

$arr = [];// 从尾部进栈echo array_push($arr, 10, 20, 'PHP', 'JAVA'), '<br>';print_r($arr);echo '<hr>';// 从尾部出栈,先进的元素后出(删除数组中的数据并返回元素的值)echo array_pop($arr), '<br>';echo array_pop($arr), '<br>';echo array_pop($arr), '<br>';echo array_pop($arr), '<hr>';// 从头部进栈,echo array_unshift($arr, 20, 'C++', 'python'), '<br>';array_unshift($arr, 'php');array_unshift($arr, '汇编');print_r($arr);echo '<hr>';// 从头部出栈,(删除数组中的数据并返回元素的值)echo array_shift($arr), '<br>';echo array_shift($arr), '<br>';echo array_shift($arr), '<br>';echo array_shift($arr), '<br>';echo array_shift($arr), '<hr>';

$arr = [];// 尾部进入,头部出值array_push($arr, 'JAVA');array_push($arr, 'PHP');array_push($arr, 'C++');print_r($arr);echo '<br>';// 从头部出值echo array_shift($arr), '<br>';echo array_shift($arr), '<br>';echo array_shift($arr), '<hr>';// 头部进入,尾部出值array_unshift($arr, 'JAVA');array_unshift($arr, 'PHP');array_unshift($arr, 'C++');print_r($arr);echo '<br>';// 尾部出值echo array_pop($arr), '<br>';echo array_pop($arr), '<br>';echo array_pop($arr), '<br>';

// 数组中的值排序$arr = [25, 'php', 85, 'html'];echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';// 默认按值的升序排列使用sort()键名会重排,使用asort()键名不会重排asort($arr);echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';// 键名重新排列sort($arr);echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';// 自定义函数(效果和sort是一样的,键名也会重排)usort($arr, function ($a, $b) {return $a <=> $b;});// 键名排序$arrs = ['b' => 5, 'a' => 8, 'c' => 10];echo "<pre>" . print_r($arrs, true) . "</pre>", '<hr>';// 键名升序排列ksort($arrs);echo "<pre>" . print_r($arrs, true) . "</pre>", '<hr>';// 键名降序排列krsort($arrs);echo "<pre>" . print_r($arrs, true) . "</pre>", '<hr>';// 自然排序(用于字符串中有数字和其他字母的排序)$txts = ['temp2.txt', 'temp15.txt', 'temp10.txt', 'temp8.txt'];echo "<pre>" . print_r($txts, true) . "</pre>", '<hr>';// 标准排序sort($txts);echo "<pre>" . print_r($txts, true) . "</pre>", '<hr>';// 自然排序natsort($txts);echo "<pre>" . print_r($txts, true) . "</pre>", '<hr>';
标准排序
自然排序
// array_slice():第一个参数为需要取值的数组,第二个参数为从什么位置开始取,第三个参数为取几个$arr = ['id' => 12, 'name' => '小红', 'sex' => '女', 'taste' => 'php'];echo "<pre>" . print_r($arr, true) . "</pre>", '<hr>';$a = array_slice($arr, 1, 3);echo "<pre>" . print_r($a, true) . "</pre>", '<hr>';// 第二个参数可以为负数$b = array_slice($arr, -2, 2);echo "<pre>" . print_r($b, true) . "</pre>", '<hr>';

// array_splice()函数,(返回值为被操作了的值)// 第一个参数为需要操作的数组,第二个参数为从哪个位置开始操作,// 第三个参数为要操作几个值(为0则是数组的增加操作)// 如果写入第四个参数那么是数组的替换数值或者增加数值$int = [10, 15, 85, 75, 12, 48, 82, 54];$int1 = [10, 15, 85, 75, 12, 48, 82, 54];$int2 = [10, 15, 85, 75, 12, 48, 82, 54];echo "<pre>" . print_r($int, true) . "</pre>", '<hr>';// 删除操作$a = array_splice($int, 2, 3);echo "<pre>" . print_r($int, true) . "</pre>", '<hr>';// 替换操作$b = array_splice($int1, 2, 3, [222, 333, 444]);echo "<pre>" . print_r($int1, true) . "</pre>", '<hr>';// 增加操作$c = array_splice($int2, 2, 0, [999, 888, 777]);echo "<pre>" . print_r($int2, true) . "</pre>", '<hr>';

// array_combine()将两个数组合并,一个数组作为键名,一个数组作为值$key = ['id', '小红', '女', 'PHP'];$value = [1, 'name', 'sex', 'taste'];echo "<pre>" . print_r(array_combine($key, $value), true) . "</pre>", '<hr>';// array_merge()将一个或多个数组合并为一个数组echo "<pre>" . print_r(array_merge($key, $value), true) . "</pre>", '<hr>';

// array_filter()函数:过滤掉空值$arr = ['php', [], 13, false, (new class{}), null, 'java', 0, [1, 3, 5]];// 过滤掉元素值不能转换true的值echo "<pre>" . print_r(array_filter($arr), true) . "</pre>", '<hr>';// 过滤掉数组中的复合数据类型和特殊数据类型$a = array_filter($arr, function ($i) {return is_scalar($i);});echo "<pre>" . print_r($a, true) . "</pre>", '<hr>';

$arrs = ['php', 13, (new class{public $name = '小明';public $sex = '男';public $taste = 'php';}), 'java', [1, 3, 5]];// 操作:如果值为数组则转为字符串输出,为对象则获取之中的值输出,否则直接输出$aa = array_map(function ($i) {// 判断switch (gettype($i)) {case 'object':$i = get_object_vars($i);case 'array':$i = implode(',', $i);}return $i;}, $arrs);echo "<pre>" . print_r($aa, true) . "</pre>", '<hr>';

// extract()函数:将关联数组拆分为变量$arr = ['id' => 12, 'name' => '小红', 'sex' => '女', 'taste' => 'php'];extract($arr);echo $id . '<br>' . $name . '<br>' . $sex . '<br>' . $taste . '<hr>';// compact()函数可以把一组变量转为关联数组$id = 2;$name = '小明';$sex = '男';$taste = 'JAVA';echo "<pre>" . print_r(compact('id', 'name', 'sex', 'taste'), true) . "</pre>", '<hr>';

总结
1.了解了更多的数组函数
2.课后查看手册便于了解课上没讲到的数组函数
3.多练习代码,以便于掌握
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号