数组函数
<?php
// 数组函数
//!1.array_change_key_case:将数组中的所有键名修改为全大写或小写
//array_change_key_case(array $array, int $case = CASE_LOWER): array
// 参数
// array
// 需要操作的数组。
// case
// 可以在这里用两个常量,CASE_UPPER 或 CASE_LOWER(默认值)。
$input_array = array("FirSt" => 'first', "SecOnd" => 'second');
//将数组中的所有键名修改为全大写
print_r(array_change_key_case($input_array, CASE_UPPER));
echo '<br>';
//将数组中的所有键名修改为全小写
print_r(array_change_key_case($input_array, CASE_LOWER));
echo '<hr>';
//!2.array_chunk — 将一个数组分割成多个
//array_chunk(array $array, int $length, bool $preserve_keys = false): array
// array
// 需要操作的数组
// length
// 每个数组的单元数目
// preserve_keys
// 设为 true,可以使 PHP 保留输入数组中原来的键名。如果你指定了 false,那每个结果数组将用从零开始的新数字索引。默认值是 false。
$arr = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($arr, 2));
echo '<br>';
print_r(array_chunk($arr, 3, true));
echo '<hr>';
//!3.array_column 返回输入数组中指定列的值
// 从结果集中取出 first_name 列
// 表示从数据库返回的记录集的数组
$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',
)
);
//不指定键名,数字索引
$first_names = array_column($records, 'first_name');
print_r($first_names);
echo '<br>';
// 指定原id为键名
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
echo '<hr>';
//!4 array_combine — 创建一个数组,用一个数组的值作为其键名,另一个数组的值作为其值
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
print_r($c);
echo '<hr>';
//!5 array_count_values — 统计数组中所有的值
//返回一个关联数组,用 array 数组中的值作为键名,该值在数组中出现的次数作为值
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array));
echo '<hr>';
//!6 array_diff_assoc — 带索引检查计算数组的差集
//比较键名
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result);
echo '<hr>';
//!7.array_diff — 计算数组的差集
//不比较键名
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result);
echo '<hr>';
//!8 array_diff_key — 使用键名比较计算数组的差集
//比较是根据键名而不是值来进行的
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2));
echo '<hr>';
//!9 array_diff_uassoc — 用用户提供的回调函数做索引检查来计算数组的差集
//array_diff_uassoc(array $array, array ...$arrays, callable $key_compare_func): array
//比较了 array 和 arrays 并返回不同之处。 注意和 array_diff() 不同的是键名也用于比较。
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red", "c" => "blue");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result);
echo '<hr>';
//!10 array_fill_keys — 使用指定的键和值填充数组
$keys = array('foo', 5, 10, 'bar');
$a = array_fill_keys($keys, 'banana');
print_r($a);
echo '<hr>';
//!11 array_flip — 交换数组中的键和值
$input = array("oranges", "apples", "pears");
$flipped = array_flip($input);
print_r($flipped);
echo '<hr>';
//! 12 array_intersect_assoc — 带索引检查计算数组的交集
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "b" => "yellow", "blue", "red");
$result_array = array_intersect_assoc($array1, $array2);
print_r($result_array);
echo '<hr>';echo '<hr>';
//!13 array_intersect — 计算数组的交集
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result);
echo '<hr>';
//!14 array_is_list — 判断给定的 array 是否为 list
// (PHP 8 >= 8.1.0)
// if(array_is_list([])){
// echo 'true';
// }else{
// echo 'false';
// };
// array_is_list(['apple', 2, 3]); // true
// array_is_list([0 => 'apple', 'orange']); // true
// // key 未从 0 开始
// array_is_list([1 => 'apple', 'orange']); // false
// // key 的顺序不正确
// array_is_list([1 => 'apple', 0 => 'orange']); // false
// // 包含非整数 key
// array_is_list([0 => 'apple', 'foo' => 'bar']); // false
// // 非连续 key
// array_is_list([0 => 'apple', 2 => 'bar']); // false
//!15 array_key_first — 获取指定数组的第一个键
$array = ['a' => 1, 'b' => 2, 'c' => 3];
$firstKey = array_key_first($array);
var_dump($firstKey);
echo '<hr>';
//!16 array_key_last — 获取一个数组的最后一个键值
$array = ['a' => 1, 'b' => 2, 'c' => 3];
$lastKey = array_key_last($array);
var_dump($lastKey);
echo '<hr>';
//!17 array_keys — 返回数组中部分的或所有的键名
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
$array = array("color" => array("blue", "red", "green"),
"size" => array("small", "medium", "large"));
print_r(array_keys($array));
//! 18 array_merge_recursive — 递归地合并一个或多个数组
$ar1 = array("color" => array("favorite" => "red"), 5);
$ar2 = array(10, "color" => array("favorite" => "green", "blue"));
$result = array_merge_recursive($ar1, $ar2);
print_r($result);
echo '<hr>';
//!18 array_merge — 合并一个或多个数组
//如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将 不会 覆盖原来的值,而是附加到后面。
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
echo '<hr>';
//!19 array_product — 计算数组中所有值的乘积
$a = array(2.1, 2,3.3);
echo "product(a) = " . array_product($a) . "\n";
echo "product(array()) = " . array_product(array()) . "\n";
echo '<hr>';
//!20 array_sum — 对数组中所有值求和
$a = array(2, 4, 6, 8);
echo "sum(a) = " . array_sum($a) . "\n";
$b = array("a" => 1.2, "b" => 2.3, "c" => 3.4);
echo "sum(b) = " . array_sum($b) . "\n";