2010-12-01 9 views
-1

Un exemple de résultat de l'API est formaté comme suit. "Limit" peut être réglé à 500. J'ai essayé différentes classes de pagination pour analyser les résultats, mais je n'ai pas réussi mes tentatives. Ils fournissent l'option ["page"] => int (x) qui, selon eux, le rend facile à paginer. Facile pour les dieux de code peut-être, pas moi. Toute aide est grandement appréciée.pagination d'un tableau multidimensionnel

$var = array(7) { 
     ["errors"]=> array(0) { } 
     ["warnings"]=> array(1) { 
     [0]=> array(2) { 
      ["code"]=> string(26) "api_class_update_available" 
      ["msg"]=> string(58) "The Api class is now available in version 1.6" 
     } 
     } 
     ["data"]=> array(4) { 
     [0]=> array(3) { 
      ["url"]=> string(7) "http://" 
      ["keyword"]=> string(7) "keyword1" 
      ["price"]=> string(5) "23.99" 
     } 
     [1]=> array(3) { 
      ["url"]=> string(7) "http://" 
      ["keyword"]=> string(7) "keyword2" 
      ["price"]=> string(5) "19.99" 
     } 
     [2]=> array(3) { 
      ["url"]=> string(7) "http://" 
      ["keyword"]=> string(7) "keyword3" 
      ["price"]=> string(5) "29.99" 
     } 
     [3]=> array(3) { 
      ["url"]=> string(7) "http://" 
     ["keyword"]=> string(7) "keyword4" 
      ["price"]=> string(5) "9.99" 
     } 
     } 
     ["countryCode"] => string(2) "US" 
     ["page"] => int(1) 
     ["limit"]=> int(4) 
    } 
+1

'Un exemple de résultat de l'API' quelle API? –

+1

Peut-être que je ne comprends pas .... mais je ne sais pas exactement ce que vous demandez ... – Webnet

+0

Webnet - Comment puis-je paginer un tableau qui est structuré comme le code que j'ai fourni? – gBarrett

Répondre

0

Votre question est un peu incohérente, mais je vais essayer d'y répondre. On dirait que vous avez juste besoin de mettre en œuvre une pagination de base. Voici quelques liens.

http://google.com/search?q=php+pagination

http://forums.devnetwork.net/viewtopic.php?f=1&t=99545&p=537019#p537019

lieu de requêtes de base de données, vous utiliserez array_slice(). Même concept cependant.

+0

Merci Jonah - je crois comprendre qu'une classe de pagination est codée pour exécuter array_slice, ce qu'elle semble faire, mais au premier niveau, array (7), pas sur le tableau ["data"]. – gBarrett

+0

Donnez ensuite '[" data "]' à la classe. – Jonah

+0

Merci Jonah! J'ai pu obtenir la pagination en utilisant $ var ["data"]. J'apprécie vraiment l'aide. – gBarrett

1

La plupart des algorithmes de pagination fonctionnent sous l'hypothèse que la taille de l'ensemble de données est connue. Dans cet exemple particulier, cela ne semble pas être le cas, donc "out of the box" pagination algos pourrait ne pas vous aider. Il semble que l'API avec laquelle vous travaillez vous permette de récupérer des pages de données par n'importe quel numéro de page, même s'il n'y a pas de données sur ce numéro de page (la clé data sera un tableau vide).

Alors, que faire ici alors? Vous avez quelques options

  1. N'affichez que les liens de pagination "précédent" et "suivant" et récupérez uniquement les nouvelles données de l'API lorsque l'utilisateur demande une nouvelle page de données. Le kicker ici sera ceci: vous devrez pré-extraire et compter les données dans la "prochaine" page à chaque fois pour vous assurer que est réellement est une page suivante (sauf si le nombre d'enregistrements de la page actuellement récupérée est moins que la limite)
  2. Pré-fetch TOUS les les données (dans un processus similaire à # 1 seulement vous le faites tout automatiquement et non via un clic de l'utilisateur) et le morceau/paginez vous-même. Le problème avec cette approche est que vous avez maintenant pris la charge de stocker l'ensemble de données entre les demandes, ce qui pourrait être assez important. Cela peut également impliquer une quantité importante de surcharge de l'API sur le chargement initial de la page (en ignorant l'optimisation offerte par la mise en cache).

En résumé: vous avez du travail à faire.

+0

Merci pour votre contribution Peter! – gBarrett