从mysql查询重新排序数组

时间:2014-08-28 21:15:48

标签: php

我有一个从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);
    }

2 个答案:

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

这使代码更具可读性。当然,您必须知道数据库表中有哪些列。我也遗漏了额外的' []'为作者。