2016-08-01 180 views
0

我想添加一个新的索引到一个数组并在循环中为它添加值。PHP:在foreach循环中添加数组中的元素

例如我已经跟随阵列在一个循环

[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

这可以解决您的问题http://stackoverflow.com/a/38709442/4595675 –

+0

可能重复的[动态添加数据到数组](http://stackoverflow.com/questions/3325009/add-data动态的数组) – MikeJRamsey56

+0

@ MikeJRamsey56没有被接受的答案是在循环中的正确解决方案 – Sikander

回答

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'])的原因。


理论上,如果你没有有数组的数组,就必须在你的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中详细了解这一点。

+0

好的答案,我将如何做到这一点! – Darren

+0

嗨,你可以请解释这一点我真的没有得到这种使用的参考和对象操作在这种情况下,谢谢 – Sikander

+0

当然,我会编辑答案。 –