Page 1 sur 1

Pagination sur une boucle foreach

Posté : 07 janv. 2019, 13:47
par sff29
Bonjour,

j'ai créer ce petit code qui me permet d'afficher les resultats d'un foreach 10 par 10. Mais je n'arrive pas à affiner ceci à uniquement les résultats $v->zipcode == 'ma valeur'

J'espère qu'une personne pourra m'aider.

Code : Tout sélectionner

$json_source = file_get_contents('test.json'); $json_data = json_decode($json_source); $nItemsPerPage = 10; $page = isset($_GET['page'])?$_GET['page']:1; $all_products = array_slice($json_data, $nItemsPerPage*($page-1), $nItemsPerPage); foreach($all_products as $v){ echo $v->title.'<br>'; }

Re: Pagination sur une boucle foreach

Posté : 07 janv. 2019, 21:36
par @rthur
Si tu ne peux pas filtrer ton JSON pour n'avoir que les éléments qui ont le zipcode voulu, alors tu ne peux pas utiliser array_slice() mais il faut que tu fasses le tri à la mano.

En gros le principe c'est de retirer ton array_slice() et de parcourir tout le tableau pour n'afficher que les éléments qui ont le bon zipcode et qui sont à la position $nItemsPerPage*($page) à $nItemsPerPage*($page+1)
Pour connaitre la position, tu initialiser un compteur avant ta boucle foreach et tu ne l'incrémentes que si le zipcode est le bon.

Re: Pagination sur une boucle foreach

Posté : 08 janv. 2019, 02:00
par sff29
En effet je pense que la meilleure solution est de créer à la base des fichiers JSON déja triés par zipcode mais encore un autre problème se pose à moi.

Comment je pourrais via une requete comme celle ci :

$sql = "SELECT title FROM sales";

créer plusieurs fichiers JSON pour chaque zipcode ?

Du genre un fichier JSON pour tous les résultats contenant un zipcode == 34000
Un autre pour toutes les annonces dont le zipcode est égal à 37000
Etc...

Re: Pagination sur une boucle foreach

Posté : 08 janv. 2019, 02:23
par @rthur
Si c'est ta requête SELECT qui fait la récupération de tous les éléments qui sont dans ton JSON alors il te suffit de rajouter dans ta requête WHERE zipcode = '34000' pour n'avoir un JSON qu'avec les éléments qui ont ce code postal dans ta base.

Bien sûr il ne faudra pas créer un script PHP pour générer chaque fichier JSON propre à chaque postal mais utiliser un paramètre dans l'url pour passer le zipcode et que tu vas ensuite récupérer dans ton script pour le mettre en paramètre de ta requête SQL, comme ça c'est dynamique

Re: Pagination sur une boucle foreach

Posté : 08 janv. 2019, 13:40
par sff29
Oui, cela serait si simple avec un WHERE ... mais je possède une multitude de zipcode différent, ca deviendrait ingérable d'avoir une centaine voir des milliers de requetes avec un WHERE différent à chaque fois.

Est-il possible avec une seule requete de créer ces fichier JSON. Un pour chaque zipcode ?

Cela me faliciterait la vie.

Re: Pagination sur une boucle foreach

Posté : 08 janv. 2019, 13:51
par sff29
Ou alors faire cela ?

SELECT DISTINCT zipcode FROM sales

foreach () {

SELECT ... WHERE zipcode = $resultats SELECT précent

CREATION FICHIER JSON

}

De cette manière je récupère dans le foreach un exemplaire de chaque zipcode se trouvant dans la table et je créer et ensuite je fais un SELECT puis création du fichier json

Re: Pagination sur une boucle foreach

Posté : 08 janv. 2019, 19:54
par @rthur
Oui tu peux le faire un script qui va créer tous les fichiers JSON pour chaque zipcode.

Après ça dépend si tu as beaucoup de zipcode et si ceux-ci sont amenés à changer souvent. Car si c'est le cas ça sera peut être plus simple de ne pas générer des fichiers JSON en dur, mais de rendre cela dynamique, tu appelles un script PHP qui va te ressortir au format JSON le résultat de ta requête SQL et comme c'est dynamique ça sera toujours synchro avec ta bdd et tu n'auras alors pas besoin de générer tous les fichiers.

Re: Pagination sur une boucle foreach

Posté : 08 janv. 2019, 20:53
par sff29
Oui en effet c'est pas idiot. Je vais tester cela. Merci pour l'idée