批改状态:合格
老师批语:这种递归处理, 理解起来是有点难度, 一时难以理解正常, 我刚学的时候也和你一样, 等以后接触几个实际应用场景就好了
<?php//count统计数组成员数量(count不单可以统计数组,还可以统计很多东西)$arr=[1,2,3,4,5,6,7,8,9,1,1];echo count($arr);// for($i=0;$i<=count($arr);$i++){// echo ($i+1),'<br>';// }echo '<hr>';//array_count_values — 统计数组中所有的值出现的次数(听其名知其意‘数组_统计_值’)printf('<pre>%s</pre>',print_r(array_count_values($arr),true));//结果为1值=3次//如果需要进行数组计算,下面出现两个字符串,php7将解析为0.$arr=[1,2,3,'php7','7php',5,8];//array_sum为数组相加求和//array_product为数组相乘求积echo array_sum($arr).'===='.array_product($arr);
<?php// 栈与队列// 栈: 后进先出, 最后进入的最先出来, LIFO, 添加与删除受限,只允许在一端进行// 队列: 先进先出, 最先插入的数据最先出来, FIFO, 添加与删除允许在二端进行//1,栈:尾部添加/删除$i='php';$v=[66,55,33];$stack=['name','email'];//array_push — 将一个或多个单元压入数组的末尾(入栈)array_push($stack,$i,$v);//后添加后打印printf('<pre>%s</pre>',print_r($stack,true));//array_pop返回出栈的元素//array_pop — 将数组最后一个单元弹出(出栈)//简单的说就是把最后条添加的数组给删掉。array_pop($stack);//结果是$v不会被打印出来printf('<pre>%s</pre>',print_r($stack,true));echo '<hr>';//2,栈:头部删除/修改//array_unshift — 在数组开头插入一个或多个单元//原理同上,只是位置发生了变化。array_unshift($stack,$i,$v);//后添加先打印printf('<pre>%s</pre>',print_r($stack,true));//返回元素array_shift(同上返回一样)array_shift($stack);printf('<pre>%s<pre>',print_r($stack,true));echo '<hr>';//队列操作(就是栈操作的结合)//尾进+头出(array_push + array_shift)//这里需要注意的是:添加的东西按顺序排列$i='name';$v='NET2.0';$queue=['php',100];array_push($queue,$i,$v);//需要输出则是一个一个echo输出echo array_shift($queue);//printf('<pre>%s</pre>',print_r($queue,true));echo '<br>';//头进 + 尾出 (array_pop + array_unshift)原理同上。只是换了位置array_unshift($queue,$i,$v);echo array_pop($queue);
<?php//排序$arr=[10,20,'PHP','100','百度',10=>'html',30,'7php','7html','NET2'];//先打印原看看他的数组printf('<pre>%s</pre>',print_r($arr,true));//开始://1,升序(说明:从小排到大。如果出现字符串和数字同时出现,会先排字符串,原因是字符串解析成数字是0.同时重置“键”的值)//sort — 对数组排序(重置索引)sort($arr);printf('<pre>%s</pre>',print_r($arr,true));$arr=[10,20,'PHP','100','百度',10=>'html',30,'7php','7html','NET2'];//asort();(索引不变)!a=asocasort($arr);printf('<pre>%s</pre>',print_r($arr,true));echo '<hr>';//2,降序(原理同上取反)rsort($arr);//重置索引arsort($arr);//索引不变echo '<p>键名排序</p>';//键名排序$arr=[7=>10,20,'PHP','100','百度',10=>'html',30,'7php','7html',3=>'NET2'];//ksort — 对数组按照键名排序(键名升序)ksort($arr);printf('<pre>%s</pre>',print_r($arr,true));//krsort 降序krsort($arr);printf('<pre>%s</pre>',print_r($arr,true));echo '<p>自定义值升序排序</p>';//usort — 使用用户自定义的比较函数对数组中的值进行排序$arr=[10,2,0,50,100,1.2];usort($arr,function($a,$b){//$a-$b表示,需要在数组中的“值”两个两个取出来进行运算。如果遇到非数字,则报错。//注意:运算符是“-”return $a-$b;});printf('<pre>%s</pre>',print_r($arr,true));echo '<p>自定义值降序</p>';//自定义降序只需要把取出来的两个值对调过来运算即可。usort($arr,function($a,$b){return $b-$a;});printf('<pre>%s</pre>',print_r($arr,true));echo '<hr>';echo '<p>自然升序排序</p>';$arr=[10,2,0,'img31.png',50,'img22.png',100,1.2];natsort($arr);//也是由数组的值进行排序的(索引不变)var_dump($arr);//打印结果printf('<pre>%s</pre>',print_r($arr,true));echo '<p>乱序(随机排序)</p>';//shuffle — 将数组打乱//索引重置,值随机排序shuffle($arr);printf('<pre>%s</pre>',print_r($arr,true));echo '<hr>';echo '<p>键和值交换排序</p>';//array_flip — 交换数组中的键和值//注意:array_flip():只能翻转字符串和整数值!$arr=[10=>1,30=>2,'name'=>'admin','email'=>'123qq.com'];//这样做是有问题的。因为类型没有统一// $arr=['name'=>'user','email'=>'123qq.com'];//没问题// $arr=['id'=>'y','total'=>'e'];//注意下面应该是$arr=@array_flip()而不是跟上面那样直接写了。$arr=@array_flip($arr);printf('<pre>%s</pre>',print_r($arr,true));
<?php//数组查询与替换//array_slice — 从数组中取出一段//支持正数和负数。正数就是从左到右,负数就从右到左$arr=['id'=>10,'account'=>'admin','name'=>'管理员','password'=>'123456','qq'=>'123456','tel'=>'10010'];$res=array_slice($arr,0,2);//(1,-1)表示,从索引1开始取,去除右边的-1个索引的数值$res1=array_slice($arr,1,-1);//(-3,3)表示:从右边-3的索引开始取数组,取3位。$res2=array_slice($arr,-3,3);//echo $res,$res1;$arr1=print_r($res,true);$arr2=print_r($res1,true);$arr3=print_r($res2,true);//删除,替换,添加数组成员array_splice()同样支持负数//删除$delete=array_splice($arr,-2,1);$delete1=print_r($delete,true);//输出被删除元素。//$delete1=print_r($arr,true);//除了别删除元素,其他输出//删除替换。。可以删除多个只替换一个。也是可以的$replace=array_splice($arr,1,3,['super','超级管理员']);$replace1=print_r($arr,true);//添加($arr,索引位置,0:表示,不删除。['xx'=>xx]:表示从索引几的位置开始添加需要数据$add=array_splice($arr,-2,0,['email'=>'123qq.com']);$add1=print_r($arr,true);printf('<pre>%s%s%s<p>删除,替换,添加数组</p>%s%s%s</pre>',$arr1,$arr2,$arr3,$delete1,$replace1,$add1);echo '<hr>';
<?php//数组元素回调处理(注意不能留空:就是不能有空格键,否则报错)$arr=[10,'id'=>20,false,null,(new class{}),0,'','0',true];//array_filter — 用回调函数过滤数组中的单元//表示:过滤掉空数组,留下有值的数组//php自动转为false的值: null, false, 空数组, 空字符串, 0, '0'//可以这样写://$res=array_filter($arr,function($item){// return $item;// });//这样简写:$res=array_filter($arr);//echo $res;$res1=print_r($res,true);//如果需要返回标量://is_scalar — 检测变量是否是一个标量//标量:单值变量。数组和对象都不是单值变量$scalar=array_filter($arr,function($item){return is_scalar($item);});$scalar1=print_r($scalar,true);printf('<pre>%s<p>返回标量</p>%s</pre>',$res1,$scalar1);echo '<hr>';$arr=['name',20,[1,2,3],(new class{public $Bname='小米';public $Price=3000;}),'purch'=>'立即购买'];////array_map — 将回调函数作用到给定数组的单元上$res=array_map(function($item){//拉平数组$item接受数据。gettype获取变量类型switch(gettype($item)){//get_object_vars — 返回由对象属性组成的关联数组case 'object':$item=get_object_vars($item);//implode — 将一个一维数组的值转化为字符串case 'array':$item=implode($item);}return $item;},$arr);printf('<pre>%s</pre>',print_r($res,true));echo '<hr>';//array_map()同时处理多个数组$key=['host','root','password','db'];$val=['localhost','root','1231456','baidu'];//array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值$res =array_combine($key,$val);//echo $res;//$res1=print_r($res,true);printf('<pre>%s</pre>',print_r($res,true));echo '<hr>';$res=array_map(function($val1,$val2){return [$val1=>$val2];},$key,$val);printf('<pre>%s</pre>',print_r($res,true));echo $res[2]['password'];echo '<hr>';//array_reduce — 用回调函数迭代地将数组简化为单一的值$res=array_reduce($res,function($prev,$current){//获取当前元素“键”$key=key($current);//获取“值”$val=current($current);//键和值拼装$prev[$key]=$val;return $prev;});printf('<pre>%s</pre>',print_r($res,true));
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号