批改状态:合格
老师批语:
直接遍历
<?phpnamespace _0811;$stu = ['id' => 1, 'name' => 'Jack', 'course' => 'php', 'score' => 90];printf('[%s]=>%s.<br>',key($stu), current($stu));next($stu);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));next($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));next($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));next($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));// 指针指到空,prev就回不去了prev($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));prev($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));prev($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));// 指针重置回数组第一个reset($stu);printf('[%s]=>%s.<br>',key($stu), current($stu));

循环遍历
if(count($stu) > 0){while(true) {printf('[%s]=>%s.<br>', key($stu), current($stu));if(next($stu)){continue;}else{break;}}}else{echo '空数组';}echo '<hr>';//$key=key(),$value=current()foreach($stu as $key=>$value ){printf('[%s]=>%s.<br>', $key, $value);}

解构遍历
echo '<hr>';// 解构// 索引数组解构list($name, $price) = ['手机', 5000];echo $name.':'.$price.'<br>';// 关联数组解构,在 PHP 7.1.0 之前的版本,list() 仅能用于数字索引的数组,并假定数字索引从 0 开始。list('name'=>$name, 'price'=>$price) = ['name'=>'电脑', 'price'=>9000];echo $name.':'.$price.'<br>';extract(['name'=>'相机', 'price'=>19000]);echo $name.':'.$price.'<br>';

foreach遍历
// 用二维数组来模拟数据表查询结果$users = [['id'=> 5, 'name'=> 'Mike'],['id'=> 8, 'name'=> 'John'],['id'=> 14, 'name'=> 'Jerry'],];//foreachforeach($users as $user) {// print_r($user);vprintf('id=>%s,name=>%s.<br>', $user);}echo '<hr>';//foreach + list,更优雅一点的语法,同时还能在其中做校验等工作。foreach($users as list('id'=>$id, 'name'=>$name)) {printf('id=>%s,name=>%s.<br>', $id, $name);}

array_values():将数组的值,组成一个新数组,键名会重置。
用途:数组增删改查键名混乱后重置数组。
$arr = [0=>1, 2=>88, 3=>'php', 6=>[1,2,3]];printf('<pre>%s</pre>', print_r($arr,true));printf('<pre>%s</pre>', print_r(array_values($arr),true));

in_array():查询某个元素是否在这个数组中,返回布尔值。
用途:白名单查询等
echo in_array('php', $arr) ? 'php在数组中' : 'php不在数组中';

array_search():类似in_array(),但返回找到的索引。
$index = array_search('php', $arr);printf('index:%s, value:%s.<br>', $index, $arr[$index]);

array_unique():去重
$arr = [0=>1, 1=>'php', 2=>88, 3=>'php', 6=>[1,2,3]];// printf('<pre>%s</pre>', print_r($arr,true));// 去重$new_arr = array_unique($arr);print_r($new_arr);

count() 统计成员个数
echo count($arr);
array_count_values():统计每个成员的值出现的次数
$arr = [0=>1, 1=>'php', 2=>88, 3=>'php', 6=>88];printf('<pre>%s</pre>.<br>', print_r(array_count_values($arr),true));

array_sum():求和
$arr = [0=>1, 1=>'php', 2=>88, 3=>'php', 6=>88];// 1+0+88+0+88=177,字符串当做0值echo array_sum($arr).'<br>';$arr = [0=>1, 1=>'10php', 2=>88, 3=>'php', 6=>88];// 1+10+88+0+88=187,‘10php’字符串值10echo array_sum($arr).'<br>';

array_product():求乘积
$arr = [0=>1, 1=>'1php', 2=>88, 3=>'1php', 6=>88];//字符串值为1,乘积值为7744echo array_product($arr);

栈操作:成员的增删只在数组的一端进行,本质上是增删受限的操作。
// 尾部操作$arr = [1];// array_push返回数组长度。echo array_push($arr,10,20).'<br>';// 测试个写pre写法print('<pre>');print_r($arr);print('</pre>');// array_pop()返回弹出的值echo array_pop($arr).'<br>';printf('<pre>%s</pre>', print_r($arr, true));// array_pop()返回弹出的值echo array_pop($arr).'<br>';printf('<pre>%s</pre>', print_r($arr, true));

// 头部操作$arr = [1];// array_unshift返回数组长度。echo array_unshift($arr,10,20).'<br>';printf('<pre>%s</pre>', print_r($arr, true));// array_shift()返回移出的值echo array_shift($arr).'<br>';printf('<pre>%s</pre>', print_r($arr, true));// array_shift()返回移出的值echo array_shift($arr).'<br>';printf('<pre>%s</pre>', print_r($arr, true));

队列操作
// 尾部追加,头部删除。$arr = [1];//字符串都是布尔值的true// echo boolval('false') ? 'true' : 'false';//放个假布尔值,实际是字符串array_push($arr, 'false');printf('<pre>%s</pre>', print_r($arr, true));array_shift($arr);printf('<pre>%s</pre>', print_r($arr, true));//头部追加,尾部删除。echo '<hr>';array_unshift($arr,1);printf('<pre>%s</pre>', print_r($arr,true));array_pop($arr);printf('<pre>%s</pre>', print_r($arr,true));

$arr = [0, '0', '1', '!', '?', -1, 1, 30, 4, 82, 15, 20, 'A', 'abc', 'hello', 2, 46];printf('<pre>%s</pre>', print_r($arr,true));// 默认升序,0值之后先排字符串后排数字,键都会重置。sort($arr);printf('<pre>%s</pre>', print_r($arr,true));

// 键名不重置asort($arr);printf('<pre>%s</pre>', print_r($arr,true));

// 降序 rsort()// 键名不重置arsort($arr);printf('<pre>%s</pre>', print_r($arr,true));

键排序默认升序,排序后与原数组无差别。
ksort($arr);printf('<pre>%s</pre>', print_r($arr,true));
键名降序排序
krsort($arr);printf('<pre>%s</pre>', print_r($arr,true));

自定义排序
$arr = [90, 33, 2, 184, 24, 3];printf('<pre>%s</pre>', print_r($arr,true));usort($arr, function($a, $b){//升序return $a - $b;// 降序// return $b - $a;});printf('<pre>%s</pre>', print_r($arr,true));

每次调用随机乱序
shuffle($arr);printf('<pre>%s</pre>', print_r($arr,true));
第一次刷新
第二次刷新
slice切片
$stu = ['id' => 101, 'name' => '无忌', 'age' => 20, 'course' => 'php', 'grade' => 80];$res = array_slice($stu, 2, 2);printf('<pre>%s</pre>', print_r($res,true));

删除
$arr = [10, 28, 9, 33, 56, 21, 82, 47];printf('原数组:<pre>%s</pre>', print_r($arr,true));$res = array_splice($arr, 1, 2);printf('删除:<pre>%s</pre>', print_r($res,true));printf('效果:<pre>%s</pre>', print_r($arr,true));

替换
//最后替换内容参数可以是单值也可以是数组。$res = array_splice($arr, 1, 2, [666, 999]);printf('被替换:<pre>%s</pre>', print_r($res,true));printf('替换后:<pre>%s</pre>', print_r($arr,true));

追加
//从索引1处删除0个,增加两个元素。$res = array_splice($arr, 1, 0, [666, 999]);printf('没有被删除的:<pre>%s</pre>', print_r($res,true));printf('效果:<pre>%s</pre>', print_r($arr,true));

$arr = [150,'php',true,[4, 5, 6],(new class(){}),[],null,false,'',0,'0',];printf('原数组:<pre>%s</pre>', print_r($arr,true));//array_filter(),默认过滤数组中为true的元素,返回新数组。$res = array_filter($arr);printf('处理后:<pre>%s</pre>', print_r($res,true));

采用回调方式效果一样
$res = array_filter($arr, function ($item) {return $item;});
回调可以改变默认过滤方式,例如只返回标量/基础数据类型。
$res = array_filter($arr, function ($item) {// return $item;// 只返回标量/基础数据类型return is_scalar($item);});

// 再次过滤,仍是默认过滤掉空元素(非true)。printf('处理后:<pre>%s</pre>', print_r(array_filter($res),true));

对每个成员做回调处理,返回新数组。
$arr = ['php',[4, 5, 6],(new class(){public string $name = '电脑';public int $price = 8888;}),15,20,];printf('原数组:<pre>%s</pre>', print_r($arr,true));//拉平,将数组成员扁平化$res = array_map(function ($item) {switch(gettype($item)){case 'array':$item = implode(',', $item);break;case 'object':$item = implode(',', get_object_vars($item));break;}return $item;}, $arr);printf('处理后:<pre>%s</pre>', print_r($res,true));

迭代简化
$arr = [1, 2, 3, 4, 5, 6];// array_sum()的底层也是array_reduce()echo 'sum求和结果:'.array_sum($arr).'<br>';// array_reduce()参数1是需要简化的数组,参数2回调,参数3是从哪个值开始迭代简化。$res = array_reduce($arr, function ($acc, $cur) {echo '每轮参与计算的acc和cur:'.$acc.','.$cur.'<br>';return $acc + $cur;}, 0);echo 'reduce求和结果:'.$res;

使用自定义函数进行回调,返回布尔值。不常用,可以用array_map代替。
$res = ['id' => 10, 'name' => 'admin', 'email' => 'admin@php.cn'];// array_walk(数组,回调,回调的第三个数组默认值)array_walk($res, function ($value, $key, $color) {printf('[%s] => <span style="color:%s">%s</span><br>', $key, $color, $value);}, 'red');

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号