Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:数组操作函数, 还是要结合一些具体使用案例, 比较容易理解, 现在很了解语法和功能, 到时知道用哪个就可以
<?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); // 输出6
echo 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); //13
echo 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,black
array_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感觉这两个就返回值不同,用法都差不多,需要多写多记