在数组PHP中设置值

时间:2015-04-16 12:03:58

标签: php arrays

我有一个带有对象的多维数组。如果对象的状态为1或2且颜色不是绿色,我想将颜色设置为蓝色。我怎么能这样做?

foreach ($objects as $obj) {
    if (in_array($obj['status'], [1,2] )) {
        if ($obj['color'] != 'green'){
            //set color to blue
        }
    }
}

2 个答案:

答案 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';
    }
}