2013-06-28 56 views
0

我的問題是我想通過對象相等(==)映射,而不是唯一的實例。換句話說,重構這不會引發錯誤,並返回映射值:SplObjectStorage只映射實例

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

編輯:另外,如果我最終需要遍歷SplObjectStorage對象的鑰匙平等獲得,我會而是想知道一個只需散列對象/數組並簡單映射到散列的好方法。

回答

1

我會爲對象內容實現哈希函數;像這樣簡單:

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

$objmap = array(); 
$objmap[getHash($var1)] = "mapped value here"; 
echo $objmap[getHash($var2)]; 
+0

這就是我想的,但我覺得這是一個有點貴。我開始想到我需要編寫自己的'implode()'替代方案... – Hamster

+0

直到你測量它纔會是昂貴的:) –