替换关联数组中的值?

时间:2014-05-21 07:41:53

标签: php associative-array

我有这个:

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中进行了更改时,他们会确认无法进行更改。

我该如何解决这个问题?

3 个答案:

答案 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解决方案也是正确的。