2009-11-05 8 views
4

En utilisant le code suivant pour afficher une liste d'amis de mon profil Twitter. Id comme pour charger seulement un certain nombre à la fois, disons 20, puis fournir des liens à paginations DernièreComment Paginer des lignes dans une boucle foreach avec PHP

$xml = simplexml_load_string($rawxml); 

foreach ($xml->id as $key => $value) 
{ 
    $profile   = simplexml_load_file("https://twitter.com/users/$value"); 
    $friendscreenname = $profile->{"screen_name"}; 
    $profile_image_url = $profile->{"profile_image_url"}; 

    echo "<a href=$profile_image_url>$friendscreenname</a><br>"; 
} 

bas pour le premier 1-2-3-4-5 (mais beaucoup divisé par la limite) * ***** mise à jour ******

if (!isset($_GET['i'])) { 
    $i = 0; 
} else { 
    $i = (int) $_GET['i']; 
} 

$limit = $i + 10; 
$rawxml = OauthGetFriends($consumerkey, $consumersecret, $credarray[0], $credarray[1]); 
$xml = simplexml_load_string($rawxml); 

foreach ($xml->id as $key => $value) 
{ 

    if ($i >= $limit) { 
     break; 
    } 

    $i++; 
    $profile   = simplexml_load_file("https://twitter.com/users/$value"); 
    $friendscreenname = $profile->{"screen_name"}; 
    $profile_image_url = $profile->{"profile_image_url"}; 

    echo "<a href=$profile_image_url>$friendscreenname</a><br>"; 
} 

echo "<a href=step3.php?i=$i>Next 10</a><br>"; 

Cela fonctionne, suffit pour compenser la sortie à partir de $i. Penser array_slice?

+0

Cela a été demandé tout à fait beaucoup - voir par exemple http://stackoverflow.com/questions/163809/smart-pagination-algorithm –

+0

havnt trouvé ce que je cherche. Juste des exemples de la façon de le faire pour les résultats mysql. – mrpatg

+0

Je crains de manquer quelque chose, pourquoi est-il important que vous utilisiez une boucle foreach lorsque vous ne faites pas de boucle pour chaque élément? – MalphasWats

Répondre

8

Une très élégante solution utilise un LimitIterator:

$xml = simplexml_load_string($rawxml); 
// can be combined into one line 
$ids = $xml->xpath('id'); // we have an array here 
$idIterator = new ArrayIterator($ids); 
$limitIterator = new LimitIterator($idIterator, $offset, $count); 
foreach($limitIterator as $value) { 
    // ... 
} 

// or more concise 
$xml = simplexml_load_string($rawxml); 
$ids = new LimitIterator(new ArrayIterator($xml->xpath('id')), $offset, $count); 
foreach($ids as $value) { 
    // ... 
} 
+0

J'ai regardé cela et je l'ai regardé mais je ne comprends toujours pas comment l'utiliser. Pour les débutants, En utilisant l'exemple que vous avez fourni commençant par "// ou plus concis" Où est-ce que $ offset et $ count sont définis? De plus, d'où viendraient les liens visibles permettant à un visiteur de traverser les données paginées? Ceci est très similaire à ce que je voudrais faire (Pagination de sortie XML), je ne sais pas où commencer à utiliser les exemples que vous avez fournis et si cela ne vous dérange pas de mettre à jour vos exemples avec un code plus complet pour on serait très reconnaissant. –

2

Si vous chargez l'ensemble des données à chaque fois, vous pourriez être assez directe à ce sujet et utiliser une boucle au lieu d'un foreach:

$NUM_PER_PAGE = 20; 

$firstIndex = ($page-1) * $NUM_PER_PAGE; 

$xml = simplexml_load_string($rawxml); 
for($i=$firstIndex; $i<($firstIndex+$NUM_PER_PAGE); $i++) 
{ 
     $profile = simplexml_load_file("https://twitter.com/users/".$xml->id[$i]); 
     $friendscreenname = $profile->{"screen_name"}; 
     $profile_image_url = $profile->{"profile_image_url"}; 
     echo "<a href=$profile_image_url>$friendscreenname</a><br>"; 
} 

Vous aurez également besoin de limiter i $ à la longueur de tableau, mais j'espère que vous obtenez l'essentiel.

Questions connexes