Другой вариант, где ограничения являются переменными:
function matches($values, $constraints) {
$hits = array();
foreach($values as $val) {
$ok = true;
foreach($constraints as $k => $v) {
if($val[$k] != $v) $ok = false;
}
if($ok) $hits[] = $val;
}
return $hits;
}
$Unmanaged = array(
array('name' => 'SD2005', 'speed' => '1000', 'size' => 'desk', 'uplink' => 'no'),
array('name' => 'SD2008', 'speed' => '1000', 'size' => 'desk', 'uplink' => 'no'),
array('name' => 'SR2016', 'speed' => '1000', 'size' => 'rack', 'uplink' => 'no'),
array('name' => 'SR2024', 'speed' => '1000', 'size' => 'rack', 'uplink' => 'no'),
array('name' => 'SR2024C', 'speed' => '1000', 'size' => 'rack', 'uplink' => 'no'),
array('name' => 'SD205', 'speed' => '100', 'size' => 'desk', 'uplink' => 'no'),
array('name' => 'SD208', 'speed' => '100', 'size' => 'desk', 'uplink' => 'no'),
array('name' => 'SD216', 'speed' => '100', 'size' => 'desk', 'uplink' => 'no'),
array('name' => 'SR224G', 'speed' => '100', 'size' => 'rack', 'uplink' => 'yes'),
array('name' => 'SR216', 'speed' => '100', 'size' => 'rack', 'uplink' => 'no'),
array('name' => 'SR224', 'speed' => '100', 'size' => 'rack', 'uplink' => 'no'),
array('name' => 'SR224R', 'speed' => '100', 'size' => 'rack', 'uplink' => 'no')
);
print_r(matches($Unmanaged, array('speed'=>'100', 'size'=>'desk', 'uplink'=>'no')));
Выход:
Array
(
[0] => Array
(
[name] => SD205
[speed] => 100
[size] => desk
[uplink] => no
)
[1] => Array
(
[name] => SD208
[speed] => 100
[size] => desk
[uplink] => no
)
[2] => Array
(
[name] => SD216
[speed] => 100
[size] => desk
[uplink] => no
)
)