完全匹配PHP数组的键

时间:2014-08-27 07:27:25

标签: php arrays comparison

我有一个数组形式的搜索查询,如下所示:

$searcharray = array('blue'  => 1, 'red'  => 2);

我编写的代码返回多个结果数组,所有结果数组都包含搜索数组键值对。一些结果也有一些额外的键值对:

$resultsarray1 = array('blue' => 1, 'red'  => 2, 'yellow' => 7);
$resultsarray2 = array('green' => 5, 'blue' => 1, 'red'  => 2, 'yellow' => 7, 'cyan'   => 8);
$resultsarray3 = array('blue' => 1, 'red'  => 2, 'yellow' => 7, 'cyan'   => 8);
$resultsarray4 = array('blue' => 1, 'red'  => 2);
$resultsarray5 = array('red'  => 2, 'blue' => 1);
$resultsarray6 = array('blue' => 1, 'red'  => 2, 'cyan'   => 8);

我想编写一个函数,将这些结果数组与搜索数组进行比较,并返回与搜索数组中的键完全匹配的数组。也就是说,对于上面的示例,函数应该返回$ resultarray4和$ resultarray5作为与搜索数组的匹配。键的顺序并不重要。

我尝试了各种PHP交叉数组函数的组合,但没有生成所需的结果。

3 个答案:

答案 0 :(得分:2)

您可能不知道,但您只需使用==进行数组比较

if($array1==$array2)
{
     //same key value pairs
}

<强> Fiddle

var_dump($searcharray==$resultsarray1);
var_dump($searcharray==$resultsarray2);
var_dump($searcharray==$resultsarray3);
var_dump($searcharray==$resultsarray4);
var_dump($searcharray==$resultsarray5);
var_dump($searcharray==$resultsarray6);

<强>输出

bool(false)
bool(false)
bool(false)
bool(true)      //4
bool(true)      //5
bool(false)

有趣的是

如果您想要更加严格并且要求即使键的顺序相同也应该返回true,那么您只需使用===

<强> Fiddle

答案 1 :(得分:1)

根据Amadan的评论,此函数将仅比较键,而不管键顺序(但可以使用第三个参数进行配置):

function find_indentical_keys($array1 = array(), $array2 = array(), $ignore_key_order = true)
{
    if ($ignore_key_order)
    {
        ksort($array1);
        ksort($array2);
    }

    return array_keys($array1) === array_keys($array2);
}

像这样使用它(将$ resultsarrays制作成数组以使其变得简单):

$searcharray = array('blue'  => 1, 'red'  => 2);

$resultsarray[1] = array('blue' => 1, 'red'  => 2, 'yellow' => 7);
$resultsarray[2] = array('green' => 5, 'blue' => 1, 'red'  => 2, 'yellow' => 7, 'cyan'   => 8);
$resultsarray[3] = array('blue' => 1, 'red'  => 2, 'yellow' => 7, 'cyan'   => 8);
$resultsarray[4] = array('blue' => 1, 'red'  => 2);
$resultsarray[5] = array('red'  => 2, 'blue' => 1);
$resultsarray[6] = array('blue' => 1, 'red'  => 2, 'cyan'   => 8);

foreach ($resultsarray as $key => $array)
{
    echo 'Array #' . $key . ' ';
    echo (find_indentical_keys($searcharray, $array)) ? 'MATCHES' : 'does NOT match';
    echo ' the search array.<br />';
}

答案 2 :(得分:0)

尝试使用array_intersect_key()。此函数通过键来比较数组并返回匹配...