我有一个带有对象的多维数组。如果对象的状态为1或2且颜色不是绿色,我想将颜色设置为蓝色。我怎么能这样做?
foreach ($objects as $obj) {
if (in_array($obj['status'], [1,2] )) {
if ($obj['color'] != 'green'){
//set color to blue
}
}
}
答案 0 :(得分:2)
使用数组时@Ghost提供的答案是正确的。由于数组不是真正的对象,因此必须通过引用传递它们,否则它们将被复制。对象通过引用传递。
这实际上非常糟糕,并且是(许多)原因之一,你应该避免使用基本的PHP数组。此外,如果您引用了引用,则可能最终导致内存泄漏。
如果$objects
实际上是一个实际对象数组,则不需要指定它应该被视为异常。这是我写的一个测试(对不起,它有点难看):
$objects = array(
(object)array(
'status' => 1,
'color' => 'red',
)
);
foreach ($objects as $obj) {
if (in_array($obj->status, array(1,2)) && $obj->color != 'green') {
// set to blue
$obj->color = 'blue';
}
}
foreach ($objects as $obj) {
echo $obj->color;
}
在大多数情况下,PHP对象比PHP数组更快,内存效率更高,并且在大多数情况下行为非常相似。
答案 1 :(得分:1)
无需嵌套ifs,只需将它们合并为一个条件,您就可以引用副本&
进行更改:
foreach ($objects as &$obj) {
// ^ reference
if (in_array($obj['status'], [1,2]) && $obj['color'] != 'green') {
// set to blue
$obj['color'] = 'blue';
}
}