2014-05-21 4 views
2

I이있다 : 연관 배열에서 값 바꾸기?

foreach ($books as $book) 
{ 
    $catname = get_category_name($book['category']); 
    $book['category'] = $catname; 
} 
print_r($books); 

지금, $book['category'] 데이터베이스 (예를 들어 ID 1 = 소설)의 카테고리 테이블의 행의 ID를 참조하는 정수 값을 나타낸다. 추측 할 수 있듯이 get_category_name($id)은 ID를 가져와 올바른 행을 찾고 카테고리의 이름을 반환합니다. 이 함수는 올바르게 작동하며 foreach에있는 print_r($catname) 인 경우 범주 이름이 인쇄됩니다.

$books이라는 연관 배열이 데이터베이스의 서적 테이블에있는 모든 행에서 채워집니다. 내가하고 싶은 일은 각 책 요소의 범주 정수 값을 가져와 get_category_name($id)을 사용하여 해당 정수 값을 실제 범주 이름으로 바꿉니다.

내가 가지고있는 문제는 $book['category']에 이미있는 정수 값을 $catname에있는 실제 범주 이름으로 바꿀 수 없다는 것입니다. 변경 내용이 foreach에 있었는지 확인하기 위해 print_r($books)을 사용할 때 변경 사항이 적용되지 않았 음을 확인합니다.

어떻게 해결할 수 있습니까?

답변

3

나는 당신이 이것을 좋아할 것이라고 생각합니까?

foreach ($books as &$book) 
{ 
    $catname = get_category_name($book['category']); 
    $book['category'] = $catname; 
} 
print_r($books); 

& $에 유의하십시오.

+0

고맙습니다. 이제 작동 중입니다! –

+0

+1 참조로 사용 :-) – Darren

2

foreach($books as &$book)을 사용하고 $book을 편집하십시오. 이 방법을 사용하면 배열의 사본 대신 실제 배열 요소에 대한 참조를 얻을 수 있습니다. 동일한 어레이에서 여러 번이 작업을 수행하려면 사용 후 매번 어레이를 재설정해야합니다. 참조 : http://nl1.php.net/reset

또는 foreach($books as $key=>$value)을 사용하고 $books[$key]을 편집하십시오. 이렇게하면 책과 키의 사본을 얻을 수 있습니다. 그런 다음 원래 배열에서 키를 사용합니다.

0

실제로 문제는 $books이지만 $book은 변경되지 않으므로 $books에서 변경 사항을 볼 수 없습니다. 가능한 해결책 :

foreach ($books as $booksId => $book) //$booksId will contain current index in $books 
{ 
    $catname = get_category_name($book['category']); 
// now you can change correct index in $books: 
    $books[$booksId]['category'] = $catname; 
} 

편집 : 정답이있는 @ 카드 솔루션도 정확합니다.

관련 문제