2013-04-21 57 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