-
Notifications
You must be signed in to change notification settings - Fork 8
/
where.php
39 lines (35 loc) · 965 Bytes
/
where.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
namespace Dash;
/**
* @incomplete
* Returns all elements of $iterable containing key-value pairs that loosely equal $properties.
*
* @param iterable|stdClass $iterable
* @param iterable|stdClass $properties
* @return array
*
* @example
$input = [
['name' => 'Jane', 'age' => 25, 'gender' => 'f'],
['name' => 'Mike', 'age' => 30, 'gender' => 'm'],
['name' => 'Abby', 'age' => 30, 'gender' => 'f'],
['name' => 'Pete', 'age' => 45, 'gender' => 'm'],
['name' => 'Kate', 'age' => 30, 'gender' => 'f'],
];
where($input, ['gender' => 'f', 'age' => 30]);
// === [
['name' => 'Abby', 'age' => 30, 'gender' => 'f'],
['name' => 'Kate', 'age' => 30, 'gender' => 'f'],
]
*/
function where($iterable, $properties)
{
$matches = matches($properties);
$results = [];
foreach ($iterable as $key => $value) {
if ($matches($value)) {
$results[$key] = $value;
}
}
return isIndexedArray($iterable) ? array_values($results) : $results;
}