PHP - 在对象数组中按键查找对象,更新其值

fra*_*al5 7 php object

我有一个对象数组,并且想要更新其中一个对象的属性。

$objs = [ 
    ['value' => 2, 'key' => 'a'], 
    ['value' => 3, 'key' => 'b'] ,
];
Run Code Online (Sandbox Code Playgroud)

假设我想将 'key'=>'a' 的对象的 'value' 设置为 5。

除了迭代数组搜索键之外,还有其他更快/更有效的方法吗?

谢谢。

编辑:关于为什么我不能使用关联数组存在争议。这是因为这个数组是从 JSON 值获取的。

如果我的 JSON 对象是这样的:

"obj": {
    "a": {
        "key": "a", 
        "value": 2
    }, 
    "b": {
        "key": "b", 
        "value": 3
    }
}
Run Code Online (Sandbox Code Playgroud)

无法保证保留对象的顺序,而这是必需的。

因此,我需要在每个对象中都有一个索引,以便能够使用 对其进行排序usort()。所以我的 JSON 需要是:

"obj": {
    "a": {
        "key": "a", 
        "value": 2, 
        "index": 1
    }, 
    "b": {
        "key": "b", 
        "value": 3, 
        "index": 2
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不能usort()在对象上使用,只能在数组上使用。所以我的 JSON 需要是

"obj": [
    {
        "key": "a", 
        "value": 2, 
        "index": 1
    }, {
        "key": "b", 
        "value": 3, 
        "index":2
    }
]
Run Code Online (Sandbox Code Playgroud)

这让我们回到了最初的问题。

Qir*_*rel 11

通过使用,您可以提取数组中array_column()具有索引的所有值。然后您可以使用key找到该值的第一次出现。这只会返回找到值的第一个索引。然后您可以简单地替换该值,因为您现在有了该值的索引。aarray_search()

$keys = array_column($objs, 'key');
$index = array_search('a', $keys);

if ($index !== false) {
    $objs[$index]['value'] = 5;
}
Run Code Online (Sandbox Code Playgroud)

请参阅此现场演示