<?php
/*
* make sure the setA and setB are the same
*/
private function isSame($setA, $setB) {
if (!is_array($setA) && !is_array($setB)) {
return $setA == $setB;
}
if (!is_array($setA) || !is_array($setB)) {
return false;
}
$keys = array_intersect_key($setA, $setB);
if ((count($keys) != count($setA)) || (count($keys) != count($setB))) {
return false;
}
foreach ($keys as $key) {
if (!isSame($setA[$key], $setB[$key])) {
return false;
}
}
return true;
}
/*
* return true if setA has all capabilities in setB. Here the comparison is on actual capabilities, and nothing
* fancy like number of capabilities or a weighted sum of capabilities. In other words, return true if setB is a
* subset of setA.
*
* NOTE: This function does not validate if the inputs are really capability lists.
*
* @param array setA - master list to compare against
* @param array setB - subset to be compared
*
* @return bool
*/
public static function hasAllCapabilities($setA, $setB)
{
if(!isset($setA))
$setA = array();
if(!is_array($setA))
$setA = array($setA);
if(!isset($setB))
$setB = array();
if(!is_array($setB))
$setB = array($setB);
foreach ($setB as $k=>$v) {
if (array_key_exists($k, $setA)) {
if (!isSame($setA[$k], $v)) {
return false;
}
} else {
return false;
}
}
return true;
}
$a=array(101=>array(1,2,3));
$b=array(101=>array(1,2,3));
echo hasAllCapabilities($a, $b)