我有一个数组形式的搜索查询,如下所示:
$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交叉数组函数的组合,但没有生成所需的结果。
答案 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()。此函数通过键来比较数组并返回匹配...