Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查数组的一部分是否存在于较大的数组中_Php_Arrays_Json - Fatal编程技术网

Php 检查数组的一部分是否存在于较大的数组中

Php 检查数组的一部分是否存在于较大的数组中,php,arrays,json,Php,Arrays,Json,我试图检测较大的数组中是否有较小的数组 图例: $user = Larger Array $TMP = Smaller Array 例如: $TMP = Array ( [user] => Array ( [timezone] => -8 ) ) $user = Array ( [_id] => MongoId Object ( [$id] => example

我试图检测较大的数组中是否有较小的数组

图例:

$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));

一个递归函数,用于检查较小数组中的每个键和叶值是否存在于较大数组中

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

您可以直接从基本阵列进行比较,以获得有效性

 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));

如果
($TMP['user']['timezone']==$user['user']['timezone']){..}
?,这将不起作用,因为$TMP和$user是自动生成的,可以更改我想要识别的值。为什么不只是比较您想要比较的值呢<代码>数组_diff($TMP['user']['timezone'],$user['timezone'])