PHP 8.5 的新引入的原生函数 array_first 和 array_last 非常重要!

PHP 8.5 引入了两个备受期待的新函数 array_first()array_last(),虽然看似只是小改进,但这标志着 PHP 在开发者体验上的重要进步,也显示出其正逐步拥抱函数式编程思维。

为什么 PHP 需要这两个函数

在 PHP 8.5 之前,开发者获取数组首尾元素通常有以下几种方式,但都存在明显缺点:

// 方式1:使用 array_key_first() 
$first = $arr[array_key_first($arr)]; 

// 方式2:使用 reset()(会修改数组内部指针)
reset($arr); 
$first = current($arr); 

// 方式3:array_shift()(会修改原数组)
$first = array_shift($arr); 

// 方式4:array_values() 变通方案(冗长)
$first = array_values($arr)[0] ?? null;

这些解决方案都有缺点

  • reset()end() 会改变数组内部指针;
  • array_key_first()array_key_last() 返回的是键而不是值;
  • array_shift()array_pop() 会破坏原数组;
  • array_values 方案显得冗长;
  • 各框架自定义函数(如 Laravel 的 collect($arr)->first())存在兼容性问题。

PHP 新函数和用法

array_first()array_last()原生、非破坏性且指针安全的方式解决了上述问题:

function array_first(array $array): mixed
function array_last(array $array): mixed

分别返回数组的第一个或者最后一个元素,如果数组是空则返回 null

基本索引数组

$fruits = ["apple", "banana", "cherry"];

echo array_first($fruits); // "apple"
echo array_last($fruits);  // "cherry"

非连续键的关联数组

$users = [
    101 => 'Alice',
    205 => 'Bob',
    330 => 'Charlie',
];

echo array_first($users); // "Alice"
echo array_last($users);  // "Charlie"

空数组

$data = [];

var_dump(array_first($data)); // NULL
var_dump(array_last($data));  // NULL

函数返回的数组

function getNumbers(): array {
    return [100, 200, 300];
}

echo array_first(getNumbers()); // 100
echo array_last(getNumbers());  // 300

以前使用 reset() 或者 end() 可能会导致错误,现在则无副作用,无警告。

包含布尔值和引用值的数组

$flag = true ; 
$items = [& $flag , false , "final" ]; 

echo  array_first ( $items ); // true 
echo  array_last ( $items );   // "final"

即使存在引用,其值也是按值处理的,从而确保清晰度和一致性。

标志着 PHP 的函数式编程演进

这两个新函数体现了 PHP 向更函数式、更声明式的编程风格靠拢。

// 以前的命令式风格
reset($arr);
$first = current($arr);

// 现在的声明式风格
$first = array_first($arr);

函数式编程,许多开发者在 JavaScript 或 Python 中对此并不陌生。

// JavaScript 风格的
const  first = arr[ 0 ]; 

// PHP 8.5 
$first = array_first ( $arr );

这种变化让代码更清晰、更安全,且不依赖任何框架。

所以 array_first()array_last() 虽是小功能,却是 PHP 语言演进的重要一步。它们以优雅的方式解决了数组操作的常见痛点,让代码更简洁、更安全。


©我爱水煮鱼,本站推荐使用的主机:阿里云,国外主机建议使用BlueHost

本站长期承接 WordPress 优化建站业务,请联系微信:「chenduopapa」。