Как я могу ограничить общее количество результатов SimpleXML? - PullRequest
3 голосов
/ 20 февраля 2010

Я хочу ограничиться первыми 5 результатами вернулось сюда .

Это работает, но не ограничивает набор данных:

<?php

foreach($sxml->status as $status){
$name = $status->user->name;
$image =$status->user->profile_image_url;
$update =$status->text;
$url = "http://twitter.com/" .$status->user->screen_name;

echo "<li><a href=\"" . $url . "\"><img src=\"" . $image . "\" alt=\"" . $name . " image\" />" . $name . " </a> " . $update . "</li>";

}

?>

Я пробовал это:

<?php

for($n = 0; $n <= 5; $n++){
$name = $sxml->$status[$n]->user->name;
$image = $sxml->$status[$n]->user->profile_image_url;
$update = $sxml->$status[$n]->text;
$url = "http://twitter.com/" . $sxml->$status[$n]->user->screen_name;

echo "<li><a href=\"" . $url . "\"><img src=\"" . $image . "\" alt=\"" . $name . " image\" />" . $name . " </a> " . $update . "</li>";

}

?>

и я действительно не уверен, почему это не работает. Если я просто сделаю:

<?php echo $sxml->status[0]->user->name ?>

тогда я получаю правильный результат. Но при попытке сделать это внутри цикла for я получаю NULL.

Возможно, какое-то время? Совсем другая установка? Большое спасибо за любую помощь, которую вы можете оказать в этом.

Ответы [ 5 ]

4 голосов
/ 20 февраля 2010

Изменить это:

for($n = 0; $n <= 5; $n++){
$name = $sxml->$status[$n]->user->name;
$image = $sxml->$status[$n]->user->profile_image_url;
$update = $sxml->$status[$n]->text;
$url = "http://twitter.com/" . $sxml->$status[$n]->user->screen_name;

echo "<li><a href=\"" . $url . "\"><img src=\"" . $image . "\" alt=\"" . $name . " image\" />" . $name . " </a> " . $update . "</li>";

}

К этому:

for($n = 0; $n <= 5; $n++){
$name = $sxml->status[$n]->user->name;
$image = $sxml->status[$n]->user->profile_image_url;
$update = $sxml->status[$n]->text;
$url = "http://twitter.com/" . $sxml->status[$n]->user->screen_name;

echo "<li><a href=\"" . $url . "\"><img src=\"" . $image . "\" alt=\"" . $name . " image\" />" . $name . " </a> " . $update . "</li>";

}

Вы случайно написали это:

<?php echo $sxml->$status[0]->user->name ?>

Там, где он пытался использовать $status[0] как переменную переменную, и, конечно, этого не существует, и поэтому он не определен / пуст.

3 голосов
/ 20 февраля 2010

Если у вас было что-то, что работает, зачем все усложнять, меняя все? Просто ограничьте обработку первыми N записями.

$i = 0;
foreach ($sxml->status as $status) {
    if (++$i > 5) {
        // stop after 5 loops
        break;
    }
    // the rest is identical
}
1 голос
/ 20 февраля 2010

Кстати, $n = 0; $n <= 5; $n++ ограничится первыми 6 записями, а не 5.

$n = 0; $n < 5; $n++ сделает то, что вы просили.

0 голосов
/ 04 августа 2010

Я тоже пробовал это, и это прекрасно работает: -)

foreach ($ xml-> item as $ item) { if (++ $ i> 5) {break; } $ item-> title. '
'; } // foreach ()

Примечание. Я не использую $ i = 0; похоже, что по умолчанию знаю; -)

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 04 августа 2010

Разве ты не имеешь в виду $ n = 0; $ n <4; $ П ++ </p>

...