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

时间:2013-10-22 01:40:27

标签: php

我们假设我们有两个功能。首先返回一个包含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:不接受产生任何警告或通知的答案。以及使用@来抑制错误

的那些

2 个答案:

答案 0 :(得分:5)

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

return current(foo()) ?: null;

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

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

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

警告

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

答案 1 :(得分:1)

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

为什么你不能使用当前的

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

echo current(foo()); // 2