Skip to main content

filterWithKey

Note

This is a point-in-time snapshot of the API documentation from January 2026. Going forward, we will not be maintaining a public copy of these references, and recommend users to refer to the built-in signature helpers available in the Hack LSP instead for complete and up-to-date information.

Returns a Map containing the values of the current Map that meet a supplied condition applied to its keys and values

public function filterWithKey(
(function(Tk, Tv): bool) $callback,
): Map<Tk, Tv>;

Only keys and values that meet a certain criteria are affected by a call to filterWithKey(), while all values are affected by a call to mapWithKey().

The keys associated with the current Map remain unchanged in the returned Map; the keys will be used in the filtering process only.

Parameters

  • (function(Tk, Tv): bool) $callback

Returns

  • Map<Tk,Tv> - a Map containing the values after a user-specified condition is applied to the keys and values of the current Map.

Examples

This example shows how filterWithKey allows you to use an element's value and corresponding key to determine whether to include it in the filtered Map.

$m = Map {
'red' => '#ff0000',
'green' => '#00ff00',
'blue' => '#0000ff',
'yellow' => '#ffff00',
'purple' => '#663399',
};

$primary_colors = Set {'red', 'green', 'blue'};

// Filter non-primary colors with a 100% red component
$non_primary_red_100 = $m->filterWithKey(
($color, $hex_code) ==> {
$is_primary = $primary_colors->contains($color);
$has_full_red_component = \strpos($hex_code, '#ff') === 0;
return $has_full_red_component && !$is_primary;
},
);

\var_dump($non_primary_red_100);