PHP常用数组相关函数
参考链接:https://www.php.net/manual/zh/ref.array.php
compact
用变量去组成一个数组
注意:
在 PHP 7.3 之前版本,未设置的字符串会被静默忽略。
在 PHP 8.0 之后,如果指定字符串引用了未设置的变量,现在会发出
E_WARNING
级别的错误。
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", $location_vars);
print_r($result);
/**
Array
(
[event] => SIGGRAPH
[city] => San Francisco
[state] => CA
)
*/
与之相反的一个函数是 extract() — 从数组中将变量导入到当前的符号表。
extract(array &$array, int $flags = EXTR_OVERWRITE, string $prefix = ""): int
$size = "large"; $var_array = array("color" => "blue", "size" => "medium", "shape" => "sphere"); extract($var_array, EXTR_PREFIX_SAME, "wddx"); echo "$color, $size, $shape, $wddx_size\n"; //输出:blue, large, sphere, medium
is_array
检测变量是否是数组
is_array(mixed $value): bool
,如果 value
是 array,则返回 true
,否则返回 false
。
in_array
检查数组中是否存在某个值
in_array(mixed $needle, array $haystack, bool $strict = false): bool
大海捞针,在大海(haystack
)中搜索针( needle
),如果没有设置 strict
则使用宽松的比较。
explode
使用一个字符串分割另一个字符串
explode(string $separator, string $string, int $limit = PHP_INT_MAX): array
separator
边界上的分隔字符。
string
输入的字符串。
limit
-
如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。
-
如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。
-
如果 limit 是 0,则会被当做 1。
8.0.0 现在开始,当 separator 参数传入空字符串时(“”), explode() 会抛出 ValueError。 在早期版本中,explode() 会返回 false。但请注意,explode() 从未支持乱序传入参数:你必须保证
separator
参数在string
参数之前。
//我们看看参数limit的用法
$str = 'one|two|three|four';
// 正数的 limit,从前往后,字符串剩余的部分也带上
print_r(explode('|', $str, 2));
/*
Array
(
[0] => one
[1] => two|three|four
)
*/
// 负数的 limit,从后往前,后面的舍弃了
print_r(explode('|', $str, -1));
/*
Array
(
[0] => one
[1] => two
[2] => three
)
*/
implode
用字符串连接数组元素
implode(string $separator, array $array): string
遗留写法(从 PHP 7.4.0 起废弃,从 PHP 8.0.0 中移除):
implode(array $array, string $separator): string
参数separator
可以为空字符串或者不写。
$array = ['lastname', 'email', 'phone'];
var_dump(implode(",", $array)); // string(20) "lastname,email,phone"
// Empty string when using an empty array:
var_dump(implode('hello', [])); // string(0) ""
// The separator is optional:
var_dump(implode(['a', 'b', 'c'])); // string(3) "abc"
array_values
返回数组中所有的值并给其建立数字索引
经常用于数组的索引打乱后重新建立索引
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
/*
Array
(
[0] => XL
[1] => gold
)
*/
array_map
为数组的每个元素应用回调函数
array_map(?callable $callback, array $array, array ...$arrays): array
常见用法: 对数组做遍历操作
$func = function(int $value): int {
return $value * 2;
};
print_r(array_map($func, range(1, 5)));
// 或者从 PHP 7.4.0 起:
print_r(array_map(fn($value): int => $value * 2, range(1, 5)));
/*
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
*/
使用更多的数组时:
function show_Spanish(int $n, string $m): string
{
return "The number {$n} is called {$m} in Spanish";
}
function map_Spanish(int $n, string $m): array
{
return [$n => $m];
}
$a = [1, 2, 3, 4, 5];
$b = ['uno', 'dos', 'tres', 'cuatro', 'cinco'];
$c = array_map('show_Spanish', $a, $b);
print_r($c);
/*
Array
(
[0] => The number 1 is called uno in Spanish
[1] => The number 2 is called dos in Spanish
[2] => The number 3 is called tres in Spanish
[3] => The number 4 is called cuatro in Spanish
[4] => The number 5 is called cinco in Spanish
)
*/
- 如果几个数组的元素数量不一致:空元素会扩展短那个数组,直到长度和最长的数组一样。
- 传入
null
作为回调函数的名称,将创建多维数组(一个数组,内部包含数组。)$a = [1, 2, 3, 4, 5]; $b = ['one', 'two', 'three', 'four', 'five']; $c = ['uno', 'dos', 'tres', 'cuatro', 'cinco']; $d = array_map(null, $a, $b, $c); print_r($d); /* Array ( [0] => Array ( [0] => 1 [1] => one [2] => uno ) [1] => Array ( [0] => 2 [1] => two [2] => dos ) [2] => Array ( [0] => 3 [1] => three [2] => tres ) [3] => Array ( [0] => 4 [1] => four [2] => cuatro ) [4] => Array ( [0] => 5 [1] => five [2] => cinco ) ) */
array_unique
移除数组中重复的值
array_unique(array $array, int $flags = SORT_STRING): array
注意, array_unique() 不能应用于多维数组。
参数介绍
array
输入的数组。flags
第二个可选参数flags 可用于修改比较行为:比较类型标记:
SORT_REGULAR - 按照通常方法比较(不修改类型)
SORT_NUMERIC - 按照数字形式比较
SORT_STRING - 按照字符串形式比较
SORT_LOCALE_STRING - 根据当前的本地化设置,按照字符串比较。
$arr = [1,'01',2];
var_dump(array_unique($arr));
/**
array(3) {
[0]=>
int(1)
[1]=>
string(2) "01"
[2]=>
int(2)
}
*/
var_dump(array_unique($arr,SORT_NUMERIC)); //以数字的形式做比较
/**
array(2) {
[0]=>
int(1)
[2]=>
int(2)
}
*/