2014-05-21 86 views
2

我有這樣的:替換關聯數組中的值?

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

眼下,$book['category']表示一個整數值,它引用一排的ID在數據庫中(例如,ID 1 =小說)的類別表。正如你所猜測的,get_category_name($id)接收一個ID並找到正確的行,並返回該類別的名稱。該功能正常工作,如果我在它打印類別的名稱,就像它應該。

我有一個名爲$books的關聯數組,它從數據庫的書籍表中的每一行都被填充。我想要做的是取每個書籍元素的整數值類型,並使用get_category_name($id)將該整數值替換爲實際的類別名稱。

我遇到的問題是,我無法用實際的類別名稱替換已存在的$book['category']的整數值,它存在於$catname中。當我使用print_r($books)來查看更改是否在foreach中進行時,他們確認沒有做出更改。

我該如何解決這個問題?

回答

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; 
} 

編輯︰@Cardinal解決方案與refference也是正確的。