2013-04-21 84 views
0

我有一个数组,看起来是这样的:PHP返回关联数组,通过多元素搜​​索?

$array = array(
    array('Field1' => 'red', 'Field2' => 'green', 'Field3' => 'blue'), 
    array('Field1' => 'pink', 'Field2' => 'pinkish', 'Field3' => 'barbiecolor'), 
    array('Field1' => 'red', 'Field2' => 'blue', ' Field3' => 'orange') 
); 

而且我想通过给定的值进行检查:

$searchBy = array('Field1' => 'red', 'Field2' => 'blue'); 

我想达到的目标是要回归父数组具有匹配的所有关联密钥&值对。我试过in_array(),但它不工作..

回答

3

array_filter可能是这更好:

$matches = array_filter($array,function($a) use ($searchBy) { 
    foreach($searchBy as $k=>$v) { 
     if($a[$k] != $v) return false; 
    } 
    return true; 
}); 
+0

请注意尽可能少PHP所需的版本;) – dbf 2013-04-21 19:31:42

+0

哦,是的。这将在PHP 5.3中工作,但在此之前,您需要使用['create_function'](http://php.net/create-function)“。 – 2013-04-21 19:36:12

+0

@Kolink - 感谢作品完美!为了更老的版本,你如何定义这个搜索功能?谢谢 – Matt 2013-04-21 20:22:27

1

你可以试试:

$find = array_filter($array, function ($a) use($searchBy) { 
    return array_intersect_assoc($searchBy, $a) == $searchBy; 
}); 

See Live Demo

老校版

$find = find($searchBy, $array); 
print_r($find); 

// Function used 
function find($needle, $haystack) { 
    $r = array(); 
    foreach ($haystack as $k => $a) { 
     array_intersect_assoc($needle, $a) == $needle and $r[$k] = $a; 
    } 
    return $r; 
} 

Old School Demo

+0

是否可以通过PHP <5.3来实现? – Matt 2013-04-21 20:57:51

+0

是的..可以更新代码来反映,如果你想要 – Baba 2013-04-21 20:58:40

+0

会很有帮助:) – Matt 2013-04-21 21:00:21