我有这个:
foreach ($books as $book)
{
$catname = get_category_name($book['category']);
$book['category'] = $catname;
}
print_r($books);
现在,$book['category']
表示一个整数值,它引用数据库类别表中行的ID(例如ID 1 = Fiction)。您可以猜到,get_category_name($id)
获取一个ID并找到正确的行,并返回该类别的名称。该函数正常工作,如果print_r($catname)
中的foreach
,它会打印类别的名称,就像它应该的那样。
我有一个名为$books
的关联数组,它从数据库中book表的每一行填充。我想要做的是获取每个book元素的类别整数值,并使用get_category_name($id)
将该整数值替换为实际的类别名称。
我遇到的问题是我无法将$book['category']
中已存在的整数值替换为$catname
中的实际类别名称。当我使用print_r($books)
查看是否在foreach
中进行了更改时,他们会确认无法进行更改。
我该如何解决这个问题?
答案 0 :(得分:3)
我想你想要这样的东西?
foreach ($books as &$book)
{
$catname = get_category_name($book['category']);
$book['category'] = $catname;
}
print_r($books);
请注意& $ book。
答案 1 :(得分:2)
您使用foreach($books as &$book)
并修改$book
。这样您就可以引用数组中的真实book元素而不是它的副本。请注意,如果要在同一阵列上多次执行此操作,则需要在每次使用后重置阵列。请参阅:http://nl1.php.net/reset
或者您使用foreach($books as $key=>$value)
并修改$books[$key]
。这样您就可以获得书籍及其密钥的副本。但是你可以使用原始数组上的密钥。
答案 2 :(得分: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解决方案也是正确的。