2

好的,我遇到了一个小问题。

我对 PHP/JSON 数组了解一些,但对 SQL 了解更多。

我正在使用 foreach 语句来迭代这个数组,但我怎样才能限制它只显示 10 个结果呢?

$Address = $RPC2->getaddressesbyaccount($_SESSION['email']); 

foreach($Address as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}

它工作正常,但是当有 10 多个结果时,它会弄乱页面上的 CSS。

我怎样才能让它只显示 10 个结果?

4

7 回答 7

6

如果 getaddressesbyaccount 返回数组,您可以这样做:

foreach(array_slice($Address, 0, 10) as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}
于 2013-11-14T22:25:38.797 回答
5

你可以打破循环

$i = 0;
foreach($Address as $Another) {
    $i++;
    echo '<b>' . $Another . '</b><br /><br />';
    if($i==10) break;
}

但这不是最干净的解决方案。

如果您的$Address数组有数字键,则可以使用 for 循环:

$nb = sizeof($Address) < 10 ? sizeof($Address) : 10;
for($i = 0; $i < $nb; $i++){
    echo '<b>' . $Address[$i] . '</b><br /><br />';
}

min()如果您的 $Address 数组的长度小于 10,则在此处使用函数。

于 2013-11-14T22:22:21.027 回答
2

您可以计算并突破foreach(),但为什么不只是:

for($i=0; $i<10 && $i<=count($Address); $i++) {
    echo '<b>' . $Address[$i] . '</b><br /><br />';
}

假设数字键。

于 2013-11-14T22:22:43.237 回答
2

for您可以很容易地为此使用循环:

$Address = $RPC2->getaddressesbyaccount($_SESSION['email']); 

$loopTo = min(count($Address), 10);
for($i = 0; $i < $loopTo; $i++)
{
    echo '<b>'.$Address[$i].'</b><br /><br />';
}
于 2013-11-14T22:23:19.950 回答
1

我认为这应该适用于您的情况

foreach(array_slice($Address, 0, 10) as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}
于 2013-11-15T17:55:03.977 回答
1

array_slice变体是一个很好的通用解决方案,因为它在方便性(只需键入一个表达式,允许您foreach自然使用)和通用性(不依赖于数组键是顺序整数)之间取得了很好的平衡。

但是,如果您想从原始数组中取出更大的切片,则array_slice需要预先分配所有切片,从而消耗内存。如果您只需要迭代,则不需要这样做,因此更好的选择是LimitIterator

foreach (new LimitIterator($Address, 0, 10) as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}
于 2013-11-14T22:40:29.833 回答
0

向 中添加一个键以foreach获取数组索引。然后在达到 10 时终止循环。

foreach($Address as $i => $Another) {
    if ($i == 10) {
        break;
    }
    echo '<b>' . $Another . '</b><br /><br />';
}

或用于array_slice()获取数组的前 10 个元素:

foreach(array_slice($Address, 0, 10) as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}
于 2013-11-14T22:27:26.440 回答