簡體   English   中英

檢查數組的一部分是否存在於較大的數組PHP中

[英]Check If Part of an array exists in larger array PHP

我正在嘗試檢測較小的數組是否在較大的數組中。

傳說:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM