【问题标题】:PHP: Adding an element in array in foreach loopPHP:在foreach循环中的数组中添加一个元素
【发布时间】:2016-08-01 23:13:11
【问题描述】:

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

例如,我在循环中跟踪数组

[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] 之后添加一个新索引,我该怎么做,请帮忙

【问题讨论】:

标签: php arrays codeigniter


【解决方案1】:

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

$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'])来添加属性的原因。


理论上,如果您确实有一个数组数组,则有必要在您的foreach 循环中使用引用(&$book 而不是$book)以修改它们, 因为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 中详细了解这一点。

【讨论】:

  • 嗨,你能解释一下吗?在这种情况下我真的不明白引用和对象运算符的这种用法,谢谢
  • 如果它的子元素是对象,则不需要&,它已经代表了对同一个对象的引用,没有它也应该可以工作
  • @Ghost 是的,我写的答案最初错误地认为它们是数组。我只是想决定如何编辑它。
猜你喜欢
  • 2011-03-07
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 1970-01-01
  • 2017-01-15
  • 1970-01-01
相关资源
最近更新 更多