我想为数组添加一个新索引,并在循环中为其添加值。
例如我在循环中跟随数组
[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]
之后添加一个新索引我该怎么做请帮助
答案 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。