检索数组第一个元素的无通知和警告方法


Notice and warnings-free way to retrieve the first element of array

假设我们有 2 个函数。第一个返回一个包含0..N元素的数组,第二个只需要返回第一个元素,如果没有元素,则NULL

假设我们有这样的代码:

/**
 * return stdClass[]
 */
function foo()
{
    return ...;
}
/**
 * return stdClass|null
 */
function bar()
{
    $arr = foo();
    if ($arr) {
        return $arr[0];
    }
}

如您所见,bar()的实现很无聊。

如果我使用 .NET,那么我会使用arr.FirstOrDefault()方法,它将非常适合任务。

在 php 中这样做最优雅的方式是什么?

PS:不接受产生任何类型的警告或通知的答案。以及使用@来抑制错误的那些

你可以使用current(),假设foo()不改变数组指针(例如使用next()),再加上一个三元运算符:

return current(foo()) ?: null;

如果你的数组中有计算结果为 false 的标量,这显然会产生奇怪的结果,但如果所有元素都是对象,这将正常工作。

或者,为了防止foo()所做的修改,您也可以使用reset()

return reset((foo())) ?: null;

警告

请注意上面代码中多余的括号,它们不是多余的,并且基于语言的特殊性;这种行为将来可能会改变,所以你不应该依赖它。引入临时变量会更安全。

$return = ($arr = foo()) ? reset($arr) : null;

为什么你不能使用电流

function foo()
    {
    $array = array(1,2,3);
    next($array);
    return $array;
    }
echo current(foo()); // 2