0

我有一个看起来像这样的数组:

$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()了,但它不起作用。。

4

2 回答 2

3

array_filter可能会更好:

$matches = array_filter($array,function($a) use ($searchBy) {
    foreach($searchBy as $k=>$v) {
        if( $a[$k] != $v) return false;
    }
    return true;
});
于 2013-04-21T19:29:59.547 回答
1

你可以试试:

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

观看现场演示

老学校版

$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;
}

老派演示

于 2013-04-21T20:22:50.237 回答