Slice Résultat MySQL

J'ai une database nommée "bibliothèque" avec les arrays suivants:

+-------------------+ | Tables_in_library | +-------------------+ | books | | shelves | +-------------------+ 

Les livres sont stockés dans les étagères, et je ne returnne que quatre (4) livres par étagère dans une requête. Si l'étagère a plus de 4 livres, cette étagère doit être affichée deux fois sans répéter les livres déjà affichés.

C'est la table des étagères:

 +----+------+---------------------------------+ | id | uid | description | +----+------+---------------------------------+ | 1 | 1000 | Book and TV Storage Combination | | 2 | 1001 | Shelving Unit | +----+------+---------------------------------+ 

et la table des livres:

 +----+------+-------+----------------------------------------------------+ | id | uid | shelf | title | +----+------+-------+----------------------------------------------------+ | 1 | 1000 | 1000 | The Mythical Man-Month | | 2 | 1001 | 1001 | Code Complete | | 3 | 1002 | 1000 | The Art of Computer Programming | | 4 | 1003 | 1001 | The Pragmatic Programmer | | 5 | 1004 | 1001 | Structure and Interpretation of Computer Programs | | 6 | 1005 | 1000 | Comstackrs: Principles, Techniques, and Tools | | 7 | 1006 | 1001 | The C Programming Language | | 8 | 1007 | 1001 | Introduction to Algorithms | | 9 | 1008 | 1000 | Patterns of Enterprise Application Architecture | | 10 | 1009 | 1001 | Refactoring: Improving the Design of Existing Code | | 11 | 1010 | 1001 | Design Patterns | +----+------+-------+----------------------------------------------------+ 

Je vais imprimer le résultat en utilisant JSON et c'est ainsi que je le fais:

 function getShelves(){ $query = mysql_query("SELECT * FROM shelves") or die(mysql_error()); return $query; } function getBooksFromShelf($shelf){ $query = mysql_query("SELECT * FROM books WHERE shelf = '$shelf'") or die(mysql_error()); return $query; } $response = array(); $shelves = getShelves(); while($s = mysql_fetch_assoc($shelves)){ $books = getBooksFromShelf($s["uid"]); $bookList = array(); while($b = mysql_fetch_assoc($books)){ $bookList[] = array( "uid" => $b["uid"], "title" => $b["title"] ); } $response[] = array( "shelf" => $s["uid"], "books" => $bookList ); } echo json_encode($response); 

Et cela se traduit par:

 [ { "shelf": "1000", "books": [ { "uid": "1000", "title": "The Mythical Man-Month" }, { "uid": "1002", "title": "The Art of Computer Programming " }, { "uid": "1005", "title": "Comstackrs: Principles, Techniques, and Tools" }, { "uid": "1008", "title": "Patterns of Enterprise Application Architecture " } ] }, { "shelf": "1001", "books": [ { "uid": "1001", "title": "Code Complete " }, { "uid": "1003", "title": "The Pragmatic Programmer" }, { "uid": "1004", "title": "Structure and Interpretation of Computer Programs" }, { "uid": "1006", "title": "The C Programming Language" }, { "uid": "1007", "title": "Introduction to Algorithms" }, { "uid": "1009", "title": "Refactoring: Improving the Design of Existing Code" }, { "uid": "1010", "title": "Design Patterns" } ] } 

]

La deuxième étagère contient 7 livres, donc il doit être affiché deux fois, les 4 premiers et les 3 derniers livres. C'est que je me suis coincé. Merci pour vos réponses!

Vous pouvez utiliser array_chunk pour split des arrays plus grands en pièces, par exemple dans votre cas de 4:

http://www.php.net/manual/en/function.array-chunk.php

 $pieces = array_chunk($bookList, 4); foreach($pieces as $bookRow) { $response[] = array( "shelf" => $s["uid"], "books" => $bookRow ); }