Skip to content

IEnumerable.firstOrDefault() method

Marcel Kloubert edited this page Sep 25, 2015 · 3 revisions

IEnumerable->firstOrDefault([$predicateOrDefaultValue [, $defValue]]) method

Returns the first element of the sequence, or a default value if no element was found (s. FirstOrDefault()).

Syntax

public function firstOrDefault([mixed $predicateOrDefaultValue
                               [, mixed $defValue]]) : mixed;

Parameters

Name Type Description
$predicateOrDefaultValue [[predicate Predicate]]|mixed
$defValue mixed [OPTIONAL] The value to return if no matching element was found. DEFAULT value is NULL

$predicateOrDefaultValue

If it is a callable, the predicate has the following structure:

function (mixed $item, IIndexedItemContext $ctx) : bool;

$item

The current item.

$ctx

The current item context.

$defValue

Is returned if no element was found / sequence is empty.

Result

The first value of the sequence or the default value.

Examples

Default

use \System\Linq\Enumerable;

$seq1 = Enumerable::fromValues(5979, 'TM', 7.7);
$seq2 = Enumerable::fromValues();

// 5979
$a1 = $seq1->firstOrDefault();
// (false)
$a2 = $seq2->firstOrDefault(false);

With predicate (lambda expression)

use \System\Linq\Enumerable;

$seq1 = Enumerable::fromValues(5979.0, 'TM', 5979, 66.6);
$seq2 = Enumerable::fromValues();

$predicate = '$x => $x == 5979';

// 5979.0
$a1 = $seq1->firstOrDefault($predicate);
// (false)
$a2 = $seq2->firstOrDefault($predicate, false);

With predicate (closure)

use \System\Linq\Enumerable;

$seq1 = Enumerable::fromValues(5979.0, 'TM', 5979, 66.6);
$seq2 = Enumerable::fromValues();

$predicate = function($x) {
                 return $x === 5979;
             };

// 5979
$a1 = $seq1->firstOrDefault($predicate);
// (false)
$a2 = $seq2->firstOrDefault($predicate, false);
Clone this wiki locally