2016-08-01 2 views
0

배열에 새 인덱스를 추가하고 루프에 값을 추가하려고합니다. 내가 각 반복 지금 그것을PHP : foreach 루프의 배열에 요소 추가

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

을 얻고있다 방법, 예를 들어

내가 루프에서 배열을 다음 한이

[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] 후 새 인덱스를 추가 할 것입니다 제발 도와주세요

+0

이 문제가 해결 될 수 있습니다. http://stackoverflow.com/a/38709442/4595675 –

+0

[배열에 동적으로 데이터 추가] 가능한 복제본 (http://stackoverflow.com/questions/3325009/add-data) -ydynamically-to-an-array) – MikeJRamsey56

+0

@ MikeJRamsey56 아니오 수용된 대답은 루프의 적절한 해결책이었습니다 – Sikander

답변

4

먼저 foreach 루프가 실제 루프처럼 보이지 않습니다. $key 또는 $value으로 아무 것도하지 않습니다. 실제로는 $result['books']을 반복적으로 덮어 쓰고, 결과는 $query_books->result()입니다. 당신은과 같은 결과를 얻을해야합니다

$result['books'] = $query_books->result(); 

당신이, 당신이 그것을 돌이와 새로운 정보를 추가 할 수 있습니다 후 : $result['books']에서

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

항목은 실제로 배열되지 않습니다를; 그들은 stdClass Objects입니다. 따라서 배열 구문 ($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

예, 답을 수정하겠습니다. –