PHP常用数组相关函数

本文详细介绍了PHP中的常用数组处理函数,如compact用于组合变量,extract用于导入数组变量,以及is_array、in_array、explode、implode、array_values、array_map和array_unique等函数的功能和用法。
摘要由CSDN通过智能技术生成

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,如果 valuearray,则返回 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)
}
*/
  • 26
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值