1

私はこのオブジェクト配列を持っています:

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」を探す場合のみ。誰かがこれを修正する方法を知っているので、文字列の一部を同時に検索できますか?

4

1 に答える 1

4

次のように、== を 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;
}

(未テストですが、動作するはずです)

于 2013-09-11T14:19:52.370 に答える