批改状态:合格
老师批语:函数就像你在游戏中打怪的武器, 武器称手了才能打赢
在php中,数组函数和字符串函数,两个加起来,可以说完成了很多工作,比如数组的排序,在用c语言写的话,就要写一个函数功能块,而在php中,大大简化了这一步,
数组常用函数,PHP都已经内置好了,只管调用就行,所以,掌握好字符串函数和数组函数,就能优化你的代码
array_search(搜索值,数组,类型是否相同),在数组中搜索给定的值,如果成功返回相应的键名
示例:
$str = ['blue','green','red','black'];$search = 'blue';$key = array_search($search,$str);echo $key;
输出:0
array_merge(array1,arrar2,...),合并数组,如果是索引数组,则键名保持不变,如果是关联数组,则会重新进行设置
示例:
$array1 = ['10','id' =>'10','99'];$array2 = ['20','id' =>'30','40'];$array3 = ['30','id' =>'40','50'];$result = array_merge($array1,$array2,$array3);printf('<pre>%s</pre>',print_r($result,true));
输出:
Array([0] => 10[id] => 40[1] => 99[2] => 20[3] => 40[4] => 30[5] => 50)
从关联数组中取得键名
案例:
$array = ['id' => '2','name' => '张三','class' =>'991'];while ( $array_name = current($array)){if ($array_name == '张三'){echo key($array).'<br>';}next($array);}echo '<hr>';
输出:Array ( [0] => id [1] => name [2] => class )
将一个数组分割成多个
示例
$input_array = ['name' => 'apple','price' => '12','type' =>'中国'];printf('<pre>%s<pre>',print_r(array_chunk($input_array,2,true),true));echo '<hr>';
输出
Array([0] => Array([name] => apple[price] => 12)[1] => Array([type] => 中国))
创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
$a = ['name','id','class','school'];$b = ['张三','10','198','女子高中'];$c = array_combine($a,$b);printf('<pre>%s</pre>',print_r($c,true));echo '<hr>';
输出:
Array([name] => 张三[id] => 10[class] => 198[school] => 女子高中)
arrray_diff($array1,$array2,array3),对比array1和其他一个或多个数组,返回在array1中但不在其他数组里的值
示例
$array1 = ['apple','banana','orange','jjjj'];$array2 = ['apple','banana'];$array3 = ['apple'];$result = array_diff($array1,$array2,$array3);print_r($result);
输出
Array([2] => orange[3] => jjjj)
为数组的每个元素应用回调函数
示例
// 为数组的每个元素应用回调函数$array1 = ['1','2','3','4','5'];$array2 = ['2','3','4','5','6'];// 执行单个数组的回调函数function cube($n){return ($n * $n);}function cube1($n, $m){return ($n * $m);}$b = array_map("cube",$array1);// 传入两个及以上的数组时,他们元素数量将会相等。因为回调函数会并行处理相互对于的元素,如果长度不一,空元素会扩展短数组$c = array_map('cube1',$array1,$array2);print_r($b);// 当回调函数为null值时,会创建一个多维数组$d = array_map(null,$array1,$array2);printf('<pre>%s</pre>',print_r($d,true));echo '<hr>';
输出:
Array([0] => 1[1] => 4[2] => 9[3] => 16[4] => 25)Array([0] => Array([0] => 1[1] => 2)[1] => Array([0] => 2[1] => 3)[2] => Array([0] => 3[1] => 4)[3] => Array([0] => 4[1] => 5)[4] => Array([0] => 5[1] => 6))
计算数组的交集
array_intersect($array1, array $array2,…);
函数执行返回一个数组,该数组包含了所有在array1中同时出现在所有其他参数数组中的值,键名保持不变
示例:
$array = ['green','red','blue','pink'];$array1 = ['green','blue'];$array2 = ['red','blue'];$result = array_intersect($array,$array1,$array2);print_r($result);echo '<hr>';
输出:
Array([2] => blue)
使用键名比较数组的交集,函数返回一个数组,该数组包含了所有在array1中并同时出现在所有其他数组中的键名的值
注意只检查键名
示例:
$array = ['color'=>'green','lightpink','type'=>'red','pink','black'];$array1 = ['color'=>'blue','type'=>'pink','black'];$array2 = array_intersect_key($array,$array1);printf('<pre>%s</pre>',print_r($array2,true));echo '<hr>';
输出:
Array([color] => green[0] => lightpink[type] => red)
函数返回一个数组:数组的键是array里value的值,数组的值是array出现的次数
示例:
$array = [1,2,3,'hello','the','world','the',1,2];print_r(array_count_values($array));
输出:
Array([1] => 2[2] => 2[3] => 1[hello] => 1[the] => 2[world] => 1)
用回调过滤数组中的单元,返回计算结果为true的元素组成的数组$arr = [150,'php',true,[4,5,6],(new class{}),[],null,false,'',0,'0'];$res = array_filter($arr,function($item){return $item;});$res = array_filter($arr);// 只返回标量的数据$res = array_filter($arr,function($item){return is_scalar($item);});printf('<pre>%s</pre><hr>',print_r($res,true));echo '<hr>';
为数组中的每个元素应用回调函数进行处理,返回新数组,通常用在数组过滤中
实例:
$arr = ['php',[3,4,5],(new class{public $name = '电脑';public $price = 8888;}),15,20];$res = array_map(function($item){switch(gettype($item)){case 'object':$item = get_object_vars($item);case 'array':$item = implode(',',$item);}return $item;},$arr);printf('<pre>%s</pre><hr>',print_r($res,true));echo '<hr>';
输出
Array([0] => php[1] => 3,4,5[2] => 电脑,8888[3] => 15[4] => 20)
同时处理多个数组,可以同时进行合并
实例:
```php$key = ['host','username','password'];$values = ['localhost','root','123456'];$res = array_combine($key,$values);$res = array_map(function($value1,$value2){return [$value1 => $value2];},$key,$values);printf('<pre>%s</pre>',print_r($res,true));echo $res[2]['password'];echo '<hr>';```
输出:
Array([0] => Array([host] => localhost)[1] => Array([username] => root)[2] => Array([password] => 123456))
示例:```phpfunction my_array_reduce($array,$callback,$init=null){$prev = $init;foreach($array as $current) {$prev = $callback($prev,$current);}return $prev;}$result = my_array_reduce($res,function($prev,$current){// 获取当前元素的键$key = key($current);// 获取当前元素的值$value = current($current);// 拼装成键值对$prev[$key] = $value;return $prev;});printf('自定义迭代:<pre>%s</pre><hr>',print_r($result,true));echo '<hr>';$res = array_reduce($res,function($prev,$current){// 获取当前元素的键$key = key($current);// 获取当前元素的值$value = current($current);// 拼装成键值对$prev[$key] = $value;return $prev;});printf('内置的数组迭代:<pre>%s</pre>',print_r($res,true));```
输出:
Array([host] => localhost[username] => root[password] => 123456)
使用自定义回调对数组成员组个处理,返回布尔值
实例:
// 主要用于数组成员的格式化,不受数组指针影响$res = ['id' => 10,'name' => '张三','email' => '123@qq.com'];// array_walk(数组,回调,回调的第三个数组的默认值)array_walk($res,function($value,$key,$color){printf('[%s] => <span style = "color:%s">%s</span><br>',$key,$color,$value);},'yellow');
输出:
[id] => 10[name] => 张三[email] => 123@qq.com
array_slice()与array_splice两个函数,可以认为另一个是加强版,slice是从数组中截取一段,splice是可以实现数组的删除与替换
示例:
// array_slice();从数组取出一部分$array = ['id'=>'1','name'=>'张三','age'=>'19','class'=>'1988'];$output = array_slice($array,0);printf('<pre>%s</pre>',print_r($output,true));// 获取前两个$output = array_slice($array,0,2);printf('<pre>%s</pre>',print_r($output,true));// 获取中间两个$output = array_slice($array,-3,2);printf('<pre>%s</pre>',print_r($output,true));// 第二个参数支持复数$output = array_slice($array,1,-1);printf('<pre>%s</pre>',print_r($output,true));echo '<hr>';
输出
Array([id] => 1[name] => 张三[age] => 19[class] => 1988)Array([id] => 1[name] => 张三)Array([name] => 张三[age] => 19)Array([name] => 张三[age] => 19)
// 删除数组中的一部分并用其他值代替$array = [1,2,3,4,5,6,7,8];printf('原始数组元素:<pre>%s</pre>',print_r($array,true));// 删除元素$result = array_splice($array,1,2);printf('<pre>%s</pre>',print_r($array,true));// 替换功能$result = array_splice($array,1,2,[888,999]);printf('<pre>%s</pre>',print_r($array,true));// 添加$res = array_splice($array,1,0,[55,66]);printf('<pre>%s</pre>',print_r($array,true));// 负数的添加$res = array_splice($array,-3,2,[44,33,11]);printf('<pre>%s</pre>',print_r($array,true));
输出
原始数组元素:Array([0] => 1[1] => 2[2] => 3[3] => 4[4] => 5[5] => 6[6] => 7[7] => 8)Array([0] => 1[1] => 4[2] => 5[3] => 6[4] => 7[5] => 8)Array([0] => 1[1] => 888[2] => 999[3] => 6[4] => 7[5] => 8)Array([0] => 1[1] => 55[2] => 66[3] => 888[4] => 999[5] => 6[6] => 7[7] => 8)Array([0] => 1[1] => 55[2] => 66[3] => 888[4] => 999[5] => 44[6] => 33[7] => 11[8] => 8)
通过几个简单的实例,我们可以看到,数组函数已经将我们大部分工作给代替了,不用为了实现一个数组排序,而写一大堆代码,我想这应该就是php语言的特点之一,这些函数,有简单获取键名、值的,有复杂的,进行回调处理。包含的东西非常多,在以后的工作当中,肯定会用到的,数组函数是一个很重要的知识块,每天学习一点点,才能在最后用到的时候,想起来有这么一个函数,能够解决这些问题。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号