0

私の問題は、一意のインスタンスではなく、オブジェクトの等価性 (==) でマップしたいことです。つまり、これをリファクタリングして、エラーをスローせずにマップされた値を返すようにします。

$var1 = (object) [1,2,10];
$var2 = (object) [1,2,10];
$objmap = new SplObjectStorage();
$objmap[$var1] = "mapped value here";
echo $objmap[$var2];

編集: また、SplObjectStorage オブジェクトのキーを反復処理して等価にする必要がある場合は、代わりに、オブジェクト/配列をハッシュし、ハッシュにマップするだけの良い方法を知りたいと思います。

4

1 に答える 1

1

オブジェクトの内容に対してハッシュ関数を実装します。次のような簡単なもの:

function getHash($obj)
{
    return md5(serialize($obj));
}

$objmap = array();
$objmap[getHash($var1)] = "mapped value here";
echo $objmap[getHash($var2)];
于 2013-06-28T14:57:27.693 に答える