我有这个对象数组:
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;
}
(未经测试,但应该可以工作)