Search code examples
phplithium

How to pass variables into a filter on a recordset or collection


So I have a variable and a recordset:

$firstRecordID = 1;
$records = Recordset::all();

I want to filter the recordset:

$filteredRecords = $records->find(function($record){
    if($record->id == $firstRecordID)
        return true;
    else
        return false;
});

Unfortunately, the closure has no clue what $firstRecordID is.

How do I pass in the ID?


Solution

  • You can bind the $firstRecordID to the closure:

    $firstRecordID = 1;
    $records = Recordset::all();
    
    $filterFunction = function ($record) use ($firstRecordID) {
        return ($record->id == $firstRecordID);
    };
    
    $filteredRecords = $records->find($filterFunction);
    

    I also simplified your lambda into a single line.