我有一个对象数组,并且想要更新其中一个对象的属性。
$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)
请参阅此现场演示。
| 归档时间: |
|
| 查看次数: |
19860 次 |
| 最近记录: |