PHP 数组常用操作整理,提升工作效率

2023-09-05 16:02:24 浏览数 (1)

array_merge() 合并数组

语法:array_merge(array1, array2, array3...); 这个函数将一个或多个数组的单元合并起来,后一个数组中的值附加在前一个数组的后面。返回作为结果的数组。相同键名(键值对数组)会覆盖。

代码语言:javascript复制
$a1 = array("red", "green");
$a2 = array("blue", "yellow");
print_r(array_merge($a1, $a2));
//输出 Array ( [0] => red [1] => green [2] => blue [3] => yellow )

array_merge_recursive() 追加数组

语法:array_merge_recursive(array1, array2, array3...); 这个函数把一个或多个数组合并为一个数组。与array_merge()的区别是不会相同键名覆盖,而是将多个相同键名的值递归组成一个数组。

代码语言:javascript复制
$a1 = array("a"=>"red", "b"=>"green");
$a2 = array("c"=>"blue", "b"=>"yellow");
print_r(array_merge_recursive($a1, $a2));
// 输出 Array ( [a] => red [b] => Array ( [0] => green [1] => yellow ) [c] => blue )

array_combine() 组合数组

语法:array_combine(keys, values); 通过合并两个数组来创建一个新数组,其中的一个数组元素为键名,另一个数组元素为键值。键名数组和键值数组的元素个数必须相同!

代码语言:javascript复制
$fname = array("Peter", "Ben", "Joe");
$age = array("35", "37", "43");
$c = array_combine($fname, $age);
print_r($c);
// 输出 Array ( [Peter] => 35 [Ben] => 37 [Joe] => 43 )

array_slice() 拆分数组

语法:array_slice(array, start, length, preserve); 函数在数组中根据条件取出一段值,并返回。如果数组有字符串键,所返回的数组将保留键名。

代码语言:javascript复制
$a = array("red", "green", "blue", "yellow", "brown");
print_r(array_slice($a, 1, 2));
// 输出 Array ( [0] => green [1] => blue )

array_splice() 重组数组

语法:array_splice(array, start, length, array); 函数从数组中移除选定的元素,并用新元素取代它。函数也将返回被移除元素的数组。不保留替代数组中的键名。

代码语言:javascript复制
$a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
$a2 = array("a"=>"purple", "b"=>"orange");
array_splice($a1, 0, 2, $a2);
print_r($a1);
// 输出 Array ( [0] => purple [1] => orange [c] => blue [d] => yellow )
// 也可以使用该函数删除某个元素,第四个参数不填即可

array_intersect() 数组的交集(值)

语法:array_intersect(array1, array2, array3...); 函数用于比较两个(或更多个)数组的键值,并返回交集。这个数组只由第一个数组中出现的且在其他每个输入数组中都出现的值组成。 array_intersect_key() 按键取交集

代码语言:javascript复制
$a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
$a2 = array("e"=>"red", "f"=>"green", "g"=>"blue");

$result=array_intersect($a1, $a2);
print_r($result);
// 输出 Array ( [a] => red [b] => green [c] => blue )

array_intersect_assoc() 数组的交集(键值对都有匹配)

语法:array_intersect_assoc(array1, array2, array3...); 函数用于比较两个(或更多个)数组的键值,并返回交集。与array_intersect()基本相同,不同点在于此函数同时比较键/值。

代码语言:javascript复制
$a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
$a2 = array("a"=>"red", "b"=>"green", "g"=>"blue");
$a3 = array("a"=>"red", "b"=>"green", "g"=>"blue");

$result = array_intersect_assoc($a1, $a2, $a3);
print_r($result);
// 输出 Array ( [a] => red [b] => green )

array_diff() 数组的差集

语法:array_diff(array1, array2, array3...); 该函数比较两个(或更多个)数组的键值,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键值。

代码语言:javascript复制
$a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
$a2 = array("e"=>"red", "f"=>"black", "g"=>"purple");
$a3 = array("a"=>"red", "b"=>"black", "h"=>"yellow");

$result = array_diff($a1, $a2, $a3);
print_r($result);
// 输出 Array ( [b] => green [c] => blue )

array_diff_assoc() 数组的差集(键值对都有匹配)

语法:array_diff_assoc(array1, array2, array3...); 该函数比较两个(或更多个)数组的键名和键值,并返回一个差集数组,该数组包括了所有在被比较的数组(array1)中,但是不在任何其他参数数组(array2 或 array3 等等)中的键名和键值。与array_diff()基本相同,不同点在于此函数同时比较键/值。

代码语言:javascript复制
$a1 = array("a"=>"red", "b"=>"green", "c"=>"blue", "d"=>"yellow");
$a2 = array("a"=>"red", "f"=>"green", "g"=>"blue");

$result = array_diff_assoc($a1, $a2);
print_r($result);
// 输出 Array ( [b] => green [c] => blue [d] => yellow )

key() 返回数组内部指针当前指向元素的键名

语法:key(array); 从当前内部指针位置返回元素键名。注意,每次调用key()时不会移动指针。为此需要使用next()函数,这个函数的唯一作用就是完成推进指针的任务。该函数与 current() 类似,只是返回的结果不同。current() 函数返回的是元素的值,而 key() 函数返回的是元素的键名。

代码语言:javascript复制
$array = array('a'=>'', 'b'=>'', 'c'=>'', 'd'=>'');
echo key($array); // 返回当前的key,a
next($array); // 将数组指针向下移动一格
echo key($array); // 返回当前的key,b
end($array); // 将数组指针移动到最后一个值
echo key($array); // 返回当前的key,d

current() 返回数组内部指针当前指向元素的值

语法:current(array); 参考第十条key()的使用。

is_array() 判断变量是否是数组

bool is_array($var)

in_array() 搜索数组中是否存在指定的值

语法:in_array(search, array, type); 如果设置type参数为true,则检查搜索的数据与数组的值的类型是否相同。如果search参数是字符串且type参数被设置为true,则搜索区分大小写。

代码语言:javascript复制
$people = array("Bill", "Steve", "Mark", "David");

if (in_array("Mark", $people)) {
  echo "匹配已找到";
} else {
  echo "匹配未找到";
}
// 输出 匹配已找到  

array_key_exists() 检查某个数组中是否存在指定的键名

语法:array_key_exists(key, array); 检查某个数组中是否存在指定的键名

代码语言:javascript复制
$a = array("Volvo"=>"XC90", "BMW"=>"X5");
if (key_exists("Toyota", $a)) {
  echo "键存在!";
} else {
  echo "键不存在!";
}
// 输出 键不存在!  

array_search() 检查某个数组中是否存在指定的键名

语法:array_search(value, array, strict); array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false

代码语言:javascript复制
$a = array("a"=>"5", "b"=>5, "c"=>"5");
echo array_search(5, $a, true);  // 输出 b 
echo array_search(5, $a);  // 输出 a 

array_keys() 返回包含数组中所有键名的一个新数组

语法:array_keys(array, value, strict); 如果提供了第二个参数,则只返回键值为该值的键名。如果 strict 参数指定为 true,则 PHP 会使用全等比较 (===) 来严格检查键值的数据类型。

代码语言:javascript复制
$a = array("Volvo"=>"XC90", "BMW"=>"X5", "Toyota"=>"Highlander");
print_r(array_keys($a));
// 输出 Array ( [0] => Volvo [1] => BMW [2] => Toyota )

print_r(array_keys($a, "Highlander"));
// 输出 Array ( [0] => Toyota )

array_values() 返回数组中所有的值的数组

语法:array_values(array); 被返回的数组将使用数值键,从 0 开始且以 1 递增。

代码语言:javascript复制
$a = array("Name"=>"Bill", "Age"=>"60", "Country"=>"USA");
print_r(array_values($a));
// 输出 Array ( [0] => Bill [1] => 60 [2] => USA )

array_shift(); array_unshift(); array_pop(); array_push();

在数组 头/尾 部进行 增/删 元素

array_column() 返回输入数组中某个单一列的值(需要php5.5 )

语法:array_column(array, column_key, index_key); index_key为空的话则返回数字索引数组,从0开始。

代码语言:javascript复制
$a = array(
  array(
    'id' => 5698,
    'first_name' => 'Bill',
    'last_name' => 'Gates',
  ),
  array(
    'id' => 4767,
    'first_name' => 'Steve',
    'last_name' => 'Jobs',
  )
  array(
    'id' => 3809,
    'first_name' => 'Mark',
    'last_name' => 'Zuckerberg',
  )
);

$last_names = array_column($a, 'last_name', 'id');
print_r($last_names);
// 输出 Array
(
  [5698] => Gates
  [4767] => Jobs
  [3809] => Zuckerberg
)

array_walk_recursive() 对数组中的每个元素递归应用用户自定义函数

语法:array_walk_recursive(array, myfunction, parameter...) 与 array_walk() 函数 类似,array_walk_recursive() 函数对数组中的每个元素应用回调函数。不一样的是,如果原数组中的元素也是数组,就会递归地调用回调函数,也就是说,会递归到更深层的数组中去。

代码语言:javascript复制
function myfunction($value,$key)
{
echo "键 $key 的值是 $value 。<br>";
}
$a1 = array("a"=>"red", "b"=>"green");
$a2 = array($a1, "1"=>"blue", "2"=>"yellow");
array_walk_recursive($a2, "myfunction");
// 输出
键 a 的值是 red 。
键 b 的值是 green 。
键 1 的值是 blue 。
键 2 的值是 yellow 。

0 人点赞