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

Sik*_*der 0 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
                )

        )
Run Code Online (Sandbox Code Playgroud)

这就是我得到它的方式

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

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

Don*_*nic 6

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

$result['books'] = $query_books->result();
Run Code Online (Sandbox Code Playgroud)

完成后,您可以遍历它并添加新信息:

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

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


从理论上讲,如果您确实有一个数组数组,则有必要在循环中使用引用(&$book而不是$bookforeach来修改它们,因为foreach在迭代时会创建每个项目的副本:

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

print_r($result);
Run Code Online (Sandbox Code Playgroud)

这是必要使用参考来修改对象的数组等你有,因为该对象标识符的副本foreach循环仍然指向同一个对象。您可以在PHP 手册中更详细地了解这一点。

  • 如果它的子元素是对象,则不需要 `&` 它已经表示对同一对象的引用,它应该可以在没有它的情况下工作 (2认同)