【问题标题】:SplObjectStorage only maps by instancesSplObjectStorage 仅按实例映射
【发布时间】:2013-06-26 08:44:16
【问题描述】:

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

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

编辑:另外,如果我最终需要遍历 SplObjectStorage 对象的键以通过相等性获得,我想知道一种仅散列对象/数组并简单映射到散列的好方法。

【问题讨论】:

    标签: php arrays object map splobjectstorage


    【解决方案1】:

    我会为对象内容实现一个散列函数;像这样简单的事情:

    function getHash($obj)
    {
        return md5(serialize($obj));
    }
    
    $objmap = array();
    $objmap[getHash($var1)] = "mapped value here";
    echo $objmap[getHash($var2)];
    

    【讨论】:

    • 这就是我的想法,但我觉得这有点贵。我开始认为我需要编写自己的 implode() 替代方案...
    • 在你测量之前它不会很贵:)
    猜你喜欢
    • 1970-01-01
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多