在多维对象数组中查找字符串的一部分


Look for part of string in multidimensional object array

我有这个对象数组:

stdClass Object (
   [ReadOpenCallsResult] => stdClass Object (
      [CallHeader] => Array (
         [0] => stdClass Object ( 
            [DateChanged] => 0001-01-01T00:00:00 
            [DateCreated] => 2013-09-11T15:53:39.773 
            [Description] => Dubbel Test 
            [MessageCode] => C0000453325 
            [MessageId] => 83656 
            [Solved] => 
         ) 
         [1] => stdClass Object ( 
            [DateChanged] => 0001-01-01T00:00:00 
            [DateCreated] => 2013-09-11T13:40:54.077 
            [Description] => Test 
            [MessageCode] => C0000453324 
            [MessageId] => 83653 
            [Solved] => 
         ) 
      ) 
   ) 
)

我有一个函数来查找这个数组中的字符串:

function in_object($val, $obj){
    if($val == ""){
        trigger_error("in_object expects parameter 1 must not empty", E_USER_WARNING);
        return false;
    }
    if(!is_object($obj)){
        $obj = (object)$obj;
    }
    foreach($obj as $key => $value){
        if(!is_object($value) && !is_array($value)){
            if($value == $val){
                return true;
            }
        }
        else{
            return in_object($val, $value);
        }
    }
    return false;
}

现在,此函数完美地查找完整的字符串。例如,如果我搜索"测试",它会返回我这部分;

[1] => stdClass Object ( 
            [DateChanged] => 0001-01-01T00:00:00 
            [DateCreated] => 2013-09-11T13:40:54.077 
            [Description] => Test 
            [MessageCode] => C0000453324 
            [MessageId] => 83653 
            [Solved] => 
         ) 

但是,如果我查找例如"Dubbel",我希望函数返回我:

[0] => stdClass Object ( 
            [DateChanged] => 0001-01-01T00:00:00 
            [DateCreated] => 2013-09-11T15:53:39.773 
            [Description] => Dubbel Test 
            [MessageCode] => C0000453325 
            [MessageId] => 83656 
            [Solved] => 
         ) 

但事实并非如此。只有当我寻找"Dubbel Test"时。有没有人知道如何解决这个问题,这样我就可以同时搜索字符串的一部分?

将 == 替换为 strpos(),如下所示:

function in_object($val, $obj){
if($val == ""){
    trigger_error("in_object expects parameter 1 must not empty", E_USER_WARNING);
    return false;
}
if(!is_object($obj)){
    $obj = (object)$obj;
}
foreach($obj as $key => $value){
    if(!is_object($value) && !is_array($value)){
        if(strpos($value,$val)!==FALSE){
            return true;
        }
    }
    else{
        return in_object($val, $value);
    }
}
return false;
}

(未经测试,但应该可以工作)