PHP:在foreach循环中添加数组中的元素

时间:2016-08-01 23:13:12

标签: php arrays codeigniter

我想为数组添加一个新索引,并在循环中为其添加值。

例如我在循环中跟随数组

[books] => Array
        (
            [0] => stdClass Object
                (
                    [id] => 1
                    [user_id] => 5
                    [book_id] => 1
                    [date_issue] => 2016-07-24 00:00:00
                    [date_return] => 2016-07-25 00:00:00
                )

            [1] => stdClass Object
                (
                    [id] => 5
                    [user_id] => 5
                    [book_id] => 2
                    [date_issue] => 2016-07-24 00:00:00
                    [date_return] => 2016-07-25 00:00:00
                )

        )

这就是我得到它的方式

  foreach ($query_books->result() as $key => $value) {
     $result['books']= $query_books->result();
 }
 print_r($result); 

现在在每次迭代中我想在[date_return]之后添加一个新索引我该怎么做请帮助

1 个答案:

答案 0 :(得分:4)

首先,你的foreach循环看起来不像是一个循环。您没有对$key$value做任何事情;它实际上只是用$result['books']的结果重复覆盖$query_books->result()。你应该得到相同的结果:

$result['books'] = $query_books->result();

完成后,您可以循环并添加新信息:

foreach ($result['books'] as $book) {
    $book->new_index = 'new value';
}
print_r($result);

$result['books']中的项目实际上不是数组;它们是stdClass对象。这就是使用对象语法($book->new_index)来添加属性而不是数组语法($book['new_index'])的原因。

理论上,如果你 有一个数组数组,那么你需要在&$book中使用引用($book而不是foreach)循环以便修改它们,因为foreach在迭代时创建每个项目的副本:

foreach ($result['books'] as &$book) {   // use a reference
    $book['new_index'] = 'new value';
}
unset($book); // unset the reference

print_r($result);

使用引用来修改对象数组是非常必要的,因为foreach循环中对象标识符的副本仍然指向同一个对象。您可以在PHP manual

中更详细地了解这一点