0

假设我们有 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:不接受产生任何警告或通知的答案。以及@用于抑制错误的那些

4

2 回答 2

5

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

return current(foo()) ?: null;

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

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

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

警告

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

于 2013-10-22T01:48:22.273 回答
1
$return = ($arr = foo()) ? reset($arr) : null;

为什么你不能使用电流

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

echo current(foo()); // 2
于 2013-10-22T01:45:38.633 回答