批改状态:合格
老师批语:数组操作函数, 还是要结合一些具体使用案例, 比较容易理解, 现在很了解语法和功能, 到时知道用哪个就可以
<?php//array_key返回键名 第二个参数返回指定参数的键名$array = array("blue", "red", "green", "blue", "red");print_r(array_keys($array, "blue"));//array_key_exists 返回bool值$search_array = array('first' => 1, 'second' => 4);echo array_key_exists('first', $search_array);//1//array_key_last 获取最后一个键名echo array_key_last($array);//4//array_values 返回数组中所有值组成的数组 返回索引数组print_r(array_values($array));//in_array检查数组中是否存在某个值返回bool值echo in_array("blue", $array);//1//array_search在数组中搜索给定的值,如果成功 返回第一个键名echo array_search('blue', $array);//0//array_unique移除数组中重复的值,键名保持不变 只保留第一个键名//第二个可选参数// SORT_REGULAR - 按照通常方法比较(不修改类型)// SORT_NUMERIC - 按照数字形式比较// SORT_STRING - 按照字符串形式比较// SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。print_r(array_unique($array)) ;//计算数组中的单元数目,或对象中的属性个数//如果参数既不是数组,也不是实现 Countable 接口的对象,将返回 1 如果 array_or_countable 是 NULL 则结果是 0。//如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组计数。对计算多维数组的所有单元尤其有用。echo count($array);//返回5$food = array('fruits' => array('orange', 'banana'),'veggie' => array('carrot', 'collard'));// 有第二个参数echo count($food, COUNT_RECURSIVE); // 输出6echo count($food); // 输出2//array_count_values() 返回一个数组:数组的键是 array 里单元的值;数组的值是 array 单元的值出现的次数。print_r(array_count_values($array)) ;//对数组中所有值求和 ,所有值的和以整数或浮点数的结果返回,array 为空时则返回 0,字符串开头没有数字的按0计算$res = [1,'2', 'p20', '10p'];echo array_sum($res); //13echo array_product($res); //0//在数组尾部入栈操作$fruits=[];array_push($fruits, 'orange' ) ;array_push($fruits, 'banana', 'apple');print_r($fruits); //[orange, banana, apple]//尾部出栈 后进先出array_pop($fruits);print_r($fruits); //[orange, banana]//头部进栈$fruits=[];array_unshift($fruits, 'orange');array_unshift($fruits, 'banana', 'apple');print_r($fruits);//[banana, apple, orange]//头部出栈 后进先出array_shift($fruits);print_r($fruits);//[apple, orange]//队列尾部进队 头部出队$fruits = [];array_push($fruits, 'orange', 'banana', 'apple');print_r($fruits);//[orange, banana, apple]array_shift($fruits);print_r($fruits);//[ banana, apple]]//头部进队,尾部出队$fruits = [];array_unshift($fruits, 'orange', 'banana', 'apple');print_r($fruits);//[orange, banana, apple]array_pop($fruits);print_r($fruits);//[orange, banana]//array_rand — 从数组中随机取出一个或多个单元 返回键名$res = array_rand($array1,2);print_r($res);//array_column返回数组中指定的一列$records = array(array('id' => 2135,'first_name' => 'John','last_name' => 'Doe',),array('id' => 3245,'first_name' => 'Sally','last_name' => 'Smith',),array('id' => 5342,'first_name' => 'Jane','last_name' => 'Jones',),array('id' => 5623,'first_name' => 'Peter','last_name' => 'Doe',));//以id的值为键名返回last_name这一列的数组printf('<pre>%s</pre>',print_r(array_column($records,'last_name','id'),true));//array_replace — 使用传递的数组替换第一个数组的元素 如果传递了多个替换数组,它们将被按顺序依次处理,后面的数组将覆盖之前的值。$array1 = array("blue", "red", "green", "yellow");$array2 = [0=>'black', 4=>'white'];$array3 =[0=>'violet'];print_r(array_replace($array1,$array2,$array3)) ; //Array ( [0] => violet [1] => red [2] => green [3] => yellow [4] => white )//array_replace_recursive — 使用传递的数组递归替换第一个数组的元素$base = array('citrus' => array( "orange") , 'berries' => array("blackberry", "raspberry"), );$replacements = array('citrus' => array('pineapple'), 'berries' => array('blueberry'));//递归多维数组$basket = array_replace_recursive($base, $replacements);//输出Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry [1] => raspberry ) )print_r($basket);//直接替换$basket = array_replace($base, $replacements);//输出Array ( [citrus] => Array ( [0] => pineapple ) [berries] => Array ( [0] => blueberry ) )print_r($basket);//array_intersect — 计算数组的交集,键名保留不变,第一个参数数组作为主值。$arr1 = ['green','red','blue'];$arr2 = ['red','white','violet'];print_r(array_intersect($arr1,$arr2));//Array ( [1] => red )//array_intersect_assoc — 带索引检查计算数组的交集,索引也比较$arr1 = ['a'=>'green','b'=>'red','c'=>'blue'];$arr2 = ['b'=>'red','white','biue'];print_r(array_intersect_assoc($arr1,$arr2));//Array ( [b] => red )//array_diff — 计算数组的差集,对比 array1 和其他一个或者多个数组,返回在 array1 中但是不在其他 array 里的值。$array1 = array("a" => "green", "red", "blue", "red");$array2 = array("b" => "green", "yellow", "red");$result = array_diff($array1, $array2);print_r($result);//Array ( [1] => blue )//array_diff_assoc() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值,键名也用于比较。$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");$array2 = array("a" => "green", "yellow", "red");$result = array_diff_assoc($array1, $array2);print_r($result);//Array ( [1] => blue ) Array ( [b] => brown [c] => blue [0] => red )//array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值$a = array('green', 'red', 'yellow');$b = array('avocado', 'apple', 'banana');$c = array_combine($a, $b);print_r($c);//Array ( [green] => avocado [red] => apple [yellow] => banana )//array_merge() 将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。$array1 = array("color" => "red", 2, 4);$array2 = array("a", "b", "color" => "green", 4);$result = array_merge($array1, $array2);print_r($result);//Array ( [color] => green [0] => 2 [1] => 4 [2] => a [3] => b [4] => 4 )//array_chunk — 将一个数组分割成多个 ,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少于 size 个。$arr3 = ['a','b','c','d','e'];print_r(array_chunk($arr3,2));// Array ( [0] => Array ( [0] => a [1] => b ) [1] => Array ( [0] => c [1] => d ) [2] => Array ( [0] => e ) )
//1.array_slice — 从数组中取出一段//最后一个参数为true 键名索引不变$array1 = array("blue", "red", "green", "yellow");$res = array_slice($array1, 1,-1,true);printf('<pre>%s</pre>', print_r($res, true));// array[1=>red, 2=>green]//2.array_splice — 去掉数组中的某一部分并用其它值取代array_splice($array, 1,2,['yellow', 'white']);print_r($array1);//把green替换成white,blackarray_splice($array1,2,1,['white', 'black']);print_r($array1);//把索引1到-1不包括-1的值替换array_splice($array1,1,-1,['white', 'black']);print_r($array1);//在开头插入array_splice($array1,0,0,'white');print_r($array1);//尾部插入array_splice($array1,4,0,'white');print_r($array1);

//array_filter — 用回调函数过滤数组中的单元 ,返回计算结果为true的元素组成的数组//输出奇数$arr4 = [1,2,3,4,5,6,7,8,9,10];$res = array_filter($arr4, function($v){//二进制按位与return ($v & 1);});print_r($res);//array_map — 为数组的每个元素应用回调函数function detail($d, $v){return "这本书是:$d.价格是:$v";}$d = ['红鞋子','秘密花园','草房子'];$v = [30,50,80];print_r(array_map("detail",$d,$v)) ;//array_reduce — 用回调函数迭代地将数组简化为单一的值$array = array(0 => array('id' => '100', 'name' => '张三', 'age' => '30'),1 => array('id' => '110', 'name' => '李四', 'age' => '33'),2 => array('id' => '120', 'name' => '王五', 'age' => '43'),3 => array('id' => '130', 'name' => '赵六', 'age' => '53'),);$arr = array_reduce($array, function($carry, $item){$arr = ['name'=>$item['name'],'age'=>$item['age']];$id = $item['id'];$carry[$id] = $arr;return $carry;});printf('<pre>%s</pre>',print_r($arr,true)) ;//array_walk — 使用用户自定义函数对数组中的每个元素做回调处理// 主要用于数组成员 的格式化, 不受数组指针影响$arr = ['id' => '100', 'name' => '张三', 'age' => '30'];// array_walk(数组, 回调,回调的第三个数组的默认值)array_walk($arr, function($value,$key,$color){printf('[%s]=><span style="color:%s">%s</span><br>',$key,$color,$value);},'blue');
图示
数组函数十分多,有一些还不是很清楚,尤其是array_map和array_walk感觉这两个就返回值不同,用法都差不多,需要多写多记
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号