2009-11-05 3 views
4

Используя следующий код, чтобы отобразить список друзей из моего профиля Twitter. Id, как только загрузить определенное количество в то время, скажем, 20, а затем предоставить ссылки разбивки на страницы в нижней части для первой 1-2-3-4-5 (однако многие разделены предела) ПоследнееКак рисовать линии в цикле foreach с 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>"; 
} 

* ***** ****** обновление

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>"; 

Это работает, просто, чтобы компенсировать выход, начиная с $i. Мышление array_slice?

+0

Это было предложено довольно много - смотри, например http://stackoverflow.com/questions/163809/smart-pagination-algorithm –

+0

Havnt найдено что им нужно. Просто примеры того, как это сделать для результатов mysql. – mrpatg

+0

Я беспокоюсь, что мне что-то не хватает, почему важно, чтобы вы использовали цикл foreach, когда вы на самом деле не зацикливаете на каждый элемент? – MalphasWats

ответ

8

Очень элегантное решение с использованием 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

Я смотрел на это и смотрел на него, но я до сих пор не понимаю, как его использовать. Для начала, используя пример, который вы указали, начиная с «// или более кратким». Где определено значение $ offset и $ count? Кроме того, откуда взялись видимые ссылки, позволяющие посетителю перемещаться по страницам с разбивкой по страницам? Это очень похоже на то, что я хотел бы сделать (вывод Paginate XML), я просто не знаю, с чего начать использовать приведенные вами примеры, и если вы не возражаете обновлять свои примеры более полным кодом I для один был бы очень благодарен. – 2013-11-22 13:34:15

2

Если вы загружаете чтобы все данные каждый раз, вы можете быть очень прямым об этом и использовать цикл вместо Еогеасп:

$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>"; 
} 

Вам также необходимо ограничить $ I к длина массива, но, надеюсь, вы получите суть.

 Смежные вопросы

  • Нет связанных вопросов^_^