4

私はそのようなクラスを持っています:

stdClass Object
(
    [id] => 1
    [items] => stdClass Object
        (
            [0] => 123
            [1] => 234
            [2] => 345
            [3] => 456
        )
    )
)

上記のオブジェクトを呼び出しましょう$foo

としましょう$v = 234。与えられ$foo$v、どうすれば「キー」を返すことができ1ますか?

配列の場合$foo->itemsは、単純に実行します$key = array_search($v,$foo->items);。しかし、これはオブジェクトでは機能しません。

$vいくつかのオブジェクトをループせずにのキーを見つけるにはどうすればよいですかforeach

4

3 に答える 3

5

返された配列を使用get_object_varsして検索します。

参照: http: //php.net/manual/en/function.get-object-vars.php

キーに対して返された配列を検索する方法の例を次に示します。

<?php
$foo = NULL;
$foo->id = 1;
$foo->items = array(123, 234, 345, 456);
$foo_array = get_object_vars($foo);
print_r($foo_array);

foreach ($foo_array as $key => $value) {
    if ($value == 1) {
        echo $key;
    }
}
?>

出力:

Array
(
    [id] => 1
    [items] => Array
        (
            [0] => 123
            [1] => 234
            [2] => 345
            [3] => 456
        )

)
id

CodePadhttp ://codepad.org/in4w94nG

于 2012-09-20T19:00:05.980 に答える
2

例で示したように、stdClassオブジェクトを処理しています。これらは配列と非常によく似ており、PHPを使用すると、キャストと呼ばれるものを使用してこれら2つを簡単に変換できます。

$object = $foo->items;
$key = array_search($v, (array)$object);
                        ^^^^^^^--- cast to array

この小さな例が示すように(私$objectはキャストをより見やすくするために変数を使用しました。通常はワンライナーとして記述できます)、オブジェクトから配列へのキャストでは、オブジェクトで既知の関数()を使用できますarray_search

PHPの配列とstdClassオブジェクトは非常に似ているため、これは両方向で機能します。

$array  = ['property' => 'value'];
$object = (object)$array;
echo $object->property; # value

これはPHPの他のタイプでも機能するため、具体的な問題は別として、読む価値のあるものです。TypeJuggling Docsですが、PHPではこれに多くの特別なルールがあることに注意してください。しかし、配列とオブジェクトの間では、それは非常に簡単です。

于 2012-09-21T21:55:29.457 に答える
1

$key = array_search($v, get_object_vars($foo->items));

編集:これを試してください

于 2012-09-20T19:03:10.207 に答える