在foreach循环php中更改对象的属性

时间:2014-08-03 02:39:42

标签: php foreach zend-framework2 tablegateway

我有一组对象$comments 我通过调用 TableGateway 明智地调用数据库来获得它。

$comments = $this->getCommentsTable()->getComments($theme_id);

我现在需要更改数组对象元素的一个属性:

    foreach ($comments as $comment) {
        $comment->liked = 1;
    }

$comment->liked的价值不会改变。

我现在需要添加一个新属性 disliked

    foreach ($comments as $comment) {
        $comment->disliked = 1;
    }

但它没有添加(我通过以下错误知道):

( ! ) Notice: Undefined property: My\Model\Comments::$disliked  in C:\my\project\module\my\view\Name\operation\comment-info-panel.phtml on line 31
Call Stack
#   Time    Memory  Function    Location
1   0.0008  255368  {main}( )   ..\index.php:0
2   0.1599  6312880 Zend\Mvc\Application->run( )    ..\index.php:26
3   1.8049  9176328 Zend\Mvc\Application->completeRequest( )    ..\Application.php:322
4   1.8049  9176520 Zend\EventManager\EventManager->trigger( )  ..\Application.php:347
5   1.8050  9176648 Zend\EventManager\EventManager->triggerListeners( )

我参考以下内容尝试了以下内容:

    foreach ($comments as &$comment) {
        $comment->disliked = 1;
    }

但是我得到了一个令人讨厌的错误:

( ! ) Fatal error: An iterator cannot be used with foreach by reference in C:\My\Project\module\Name\src\Name\Controller\MyController.php on line 804
Call Stack
#   Time    Memory  Function    Location
1   0.0010  255368  {main}( )   ..\index.php:0
2   0.1601  6312880 Zend\Mvc\Application->run( )    ..\index.php:26

感谢您找到一种方法来修改和/或添加此数组中对象的属性。

1 个答案:

答案 0 :(得分:0)

我是按照以下方式做到的:

    $commArray = array(); // Create a new array
    $count = $comments->count(); // Get the count of the resultset rows

    // Loop over the count
    for ($i = 0; $i < $count; $i++) {

        // Get the current object
        $curComm = $comments->current();

        // Here I can change easily a property of row object
        $curComm->liked = 1;

        // Here I can easily add a new property to row object
        $curComm->disliked = 1;

        // Set the cursor of the resultset to the next row object
        $comments->next();

        // Add the current row object to the array
        array_push($commArray, $curComm);
    }

    // Do whatever you like with your new array of resultset
    return $commArray;