SplObjectStorage仅按实例映射

时间:2013-06-28 14:26:39

标签: php arrays object map splobjectstorage

我的问题是我想按对象相等(==)映射,而不是唯一的实例。换句话说,重构它不会抛出错误并返回映射值:

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

编辑:另外,如果我最终需要迭代SplObjectStorage对象的键以获得相等性,我想要知道一种好方法来只是哈希对象/数组并简单地映射到哈希

1 个答案:

答案 0 :(得分:1)

我会为对象内容实现散列函数;像这样简单的东西:

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

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