【发布时间】:2019-04-01 02:43:09
【问题描述】:
我有一个对象数组,并且想要更新其中一个对象的属性。
$objs = [
['value' => 2, 'key' => 'a'],
['value' => 3, 'key' => 'b'] ,
];
假设我想将带有 'key'=>'a' 的对象的 'value' 设置为 5。
除了遍历数组搜索键之外,还有什么更快/更有效的方法吗?
谢谢。
编辑:关于为什么我不能使用关联数组存在争议。因为这个数组是从 JSON 值中获取的。
如果我的 JSON 对象是这样的:
"obj": {
"a": {
"key": "a",
"value": 2
},
"b": {
"key": "b",
"value": 3
}
}
不能保证对象的顺序会被保留,这是必需的。
因此,我需要在每个对象中都有一个索引,以便能够使用usort() 对其进行排序。所以我的 JSON 需要是:
"obj": {
"a": {
"key": "a",
"value": 2,
"index": 1
},
"b": {
"key": "b",
"value": 3,
"index": 2
}
}
但我不能在对象上使用usort(),只能在数组上使用。所以我的 JSON 需要是
"obj": [
{
"key": "a",
"value": 2,
"index": 1
}, {
"key": "b",
"value": 3,
"index":2
}
]
这让我们想到了最初的问题。
【问题讨论】:
-
好吧,如果数组的形成方式与此不同 ->
['a' => $obj]您只需要检查它是否已设置并设置值:if(isset($objs['a']))$objs['a']['value'] = $value; -
我以前也有过,但是由于这个数组是由 JSON 组成的,所以不尊重对象的顺序。所以我必须为每个对象添加一个索引,以及它的值和键。
-
您的 json 无效。发布一些有用的东西
-
在我看来,您的问题已经在很多方面得到了解决;选择任何一个并将您的应用程序的逻辑调整为您选择的解决方案。所以改变它,例如,向对象添加一个
order字段。目前尚不清楚您想从社区中得到什么) -
@Andreas 怎么无效?除非您在第一种情况下谈论“价值”周围缺少的引号,否则这是一个很容易修复的错字。但是你的回答对我有帮助,所以我会接受它作为正确的方法。谢谢。