我正在尝试检测较小的数组是否在较大的数组中。
传奇:$user = Larger Array
$TMP = Smaller Array
示例:
$TMP =
Array
(
[user] => Array
(
[timezone] => -8
)
)
$user =
Array
(
[_id] => MongoId Object
(
[$id] => example
)
[userid] => 275
[user] => Array
(
[email] => thisisatest10@gmail.com
[id] => 48339
[timezone] => Array
(
)
)
)
在这种情况下,我想要一个返回false的脚本。
但如果时区-8已经在用户中,我希望它是真的
我已经尝试过了:
$isSubset = 0 == count(array_diff($TMP, $user));
答案 0 :(得分:1)
一个递归函数,用于检查较小数组中的每个键值和叶值是否存在于较大的数组
中function is_subset($smaller,$larger) {
foreach($smaller as $k => $v) {
if(!array_key_exists($k,$larger))
return false;
if(!is_array($v)) {
if($v == $larger[$k])
continue;
else return false;
}
else if(!is_subset($v,$larger[$k]))
return false;
}
return true;
}
$smaller = array('user' => array('timezone' => 2));
$larger = array('one' => 1,'user' => array('timezone' => 1));
var_dump(is_subset($smaller,$larger)); // false
$smaller = array('user' => array('timezone' => 1));
$larger = array('one' => 1,'user' => array('timezone' => 1));
var_dump(is_subset($smaller,$larger)); // true
答案 1 :(得分:1)
您可以直接从字节数组中比较效率
function checksub($arr,$subarr){
foreach($arr as $key=>$value){
if($value==$subarr)
return true;
else{
if(is_array($value)){
return checksub($value,$subarr);
}
}
}
return false;
}
$array=array("a"=>1,"b"=>2,array("x"=>array("some","data","z"=>"w")));
$sub=array("x"=>array("some","data","z"=>"w"));
$nosub=array("x"=>array("some","data","z"=>"changed"));
$sub2=array("some","data","z"=>"w");
var_dump(checksub($array,$sub));
var_dump(checksub($array,$sub2));
var_dump(checksub($array,$nosub));