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

zer*_*kms 0 php

假设我们有2个函数.首先返回一个包含0..N元素的数组,第二个返回只需返回第一个元素或者NULL如果没有任何元素.

假设我们有这样的代码:

/**
 * return stdClass[]
 */
function foo()
{
    return ...;
}

/**
 * return stdClass|null
 */
function bar()
{
    $arr = foo();

    if ($arr) {
        return $arr[0];
    }
}
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,执行起来bar()很无聊.

如果我使用.NET然后我会使用arr.FirstOrDefault()方法,它将完美地适合任务.

什么是在PHP中最优雅的方式?

PS:不接受产生任何警告或通知的答案.以及@用于抑制错误的那些

Ja͢*_*͢ck 5

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

return current(foo()) ?: null;
Run Code Online (Sandbox Code Playgroud)

如果您的数组中有标量符号,这显然会产生奇怪的结果false,但如果所有元素都是对象,它们将正常工作.

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

return reset((foo())) ?: null;
Run Code Online (Sandbox Code Playgroud)

警告

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