根据值更改更新数组键

时间:2014-06-08 15:21:24

标签: php

鉴于我有一个对象

$obj = new StdClass();
$obj->name = 'my-object';

这个对象就这样存储了

$store = [
    $obj->name => &$obj
];

当属性发生变化时,有没有办法更改商店密钥?

$obj->name = 'new-name';
// $store['new-name'] is not set, $store['my-object'] still is

修改

感谢斯科特指出我不应该以这种方式存储它们。这就是我想出的。这里可能有一些开销,但它是核心功能。

$obj1 = new StdClass();
$obj1->name = 'my-object';

$obj2 = new StdClass();
$obj2->name = 'another-object';

$store = [
    $obj1, $obj2
];

$key = 'my-object';

$result = array_filter($store, function ($obj) use ($key) {
    return ($obj->name == $key);
});

// Results in: [$obj1]

1 个答案:

答案 0 :(得分:0)

您不应该通过可能更改的值存储它。使用唯一标识符或guid。

如果你不能这样做(你应该这样做),那么将name属性设为私有,并使用setName()函数。在该函数中,找到对象存储,删除旧对象,然后更改名称,然后使用新名称添加对象。因为对象现在需要了解商店,所以您将拥有更紧密耦合的代码(这可能很糟糕,但可能是必要的)。