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 回答