我有一个从MYSQL查询返回的数组,带有2个LEFT JOIN。 问题是:"是否有其他方式来编写下面的代码?"。我得到了代码,但我想要一个更清晰的方法来理解内部发生的事情。
CODE:
$result = array();
while ($resultArr = mysqli_fetch_assoc($booksAndAuthors)) {
$result[$resultArr['book_id']] ['book_name'] = $resultArr['book_title'];
$result[$resultArr['book_id']] ['author'][] = $resultArr['author_name'];
print_r($result);
}
答案 0 :(得分:0)
我建议如何编写它,因为我认为你不应该依赖于自动创建中间数组。
$result = array();
while ($row = mysqli_fetch_assoc($booksAndAuthors) {
$bookid = $row['book_id'];
if (!isset($result[$bookid])) {
# First time we see this book, create a result for it
$result[$bookid] = array('book_name' => $row['book_title'],
'author' => array());
}
# add this author to the result entry for the book
$result[$bookid]['author'][] = $row['author_name'];
}
它本质上是等价的,但我认为它也使逻辑更清晰。
答案 1 :(得分:0)
使用extract()函数,您可以将结果中的数据转换为变量。我把下面的例子放在一个函数中,所以它们将是局部变量。
function getBooksAndAuthors($queryResult)
{
while ($data = mysqli_fetch_assoc($queryResult))
{
extract($data);
$BooksAndAuthors[$book_id] = array('book_name' => $book_title,
'author' => $author_name);
}
return $BooksAndAuthors;
}
这使代码更具可读性。当然,您必须知道数据库表中有哪些列。我也遗漏了额外的' []'为作者。