<?php
/*
* make sure the setA and setB are the same
*/
function isSame($setA, $setB) {
var_dump($setA);
var_dump($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
*/
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);
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
int(2)
int(2)
int(3)
int(3)
Notice: Undefined offset: 3 in /in/smoAc on line 22
Notice: Undefined offset: 3 in /in/smoAc on line 22
NULL
NULL
1
Output for 5.0.0 - 5.0.5
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Fatal error: Call to undefined function array_intersect_key() in /in/smoAc on line 16
Process exited with code 255.
Output for 4.4.5 - 4.4.9
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Fatal error: Call to undefined function: array_intersect_key() in /in/smoAc on line 16
Process exited with code 255.
Output for 4.3.2 - 4.3.11, 4.4.0 - 4.4.4
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Fatal error: Call to undefined function: array_intersect_key() in /in/smoAc on line 16
Process exited with code 255.
Output for 4.3.0 - 4.3.1
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
Fatal error: Call to undefined function: array_intersect_key() in /in/smoAc on line 16