2016-08-01 16 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 
       ) 

     ) 

の配列を以下ました。これは私が行う方法[date_return]後に新しいインデックスを追加したい各反復で、今それを

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

を取得しています方法です私はそれを助けてください

+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はのコピーを作成するため、理論的には、それらを修正するために、あなたのforeachループ内で参照(&$bookではなく$book)を使用することが必要であろうそれのように各項目を反復処理:

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

確かに、私は答えを編集します。 –

関連する問題