将 foreach 限制为仅显示 10 行数据


Limiting a foreach to show only 10 rows of data?

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

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

我正在使用 foreach 语句来迭代这个数组,但是如何将它限制为仅显示 10 个结果?

$Address = $RPC2->getaddressesbyaccount($_SESSION['email']); 
foreach($Address as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}

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

如何使其仅显示 10 个结果?

如果getAddressesbyAccount返回数组,你可以这样做:

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

你可以打破循环

$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。

您可以轻松地为此使用 for 循环:

$Address = $RPC2->getaddressesbyaccount($_SESSION['email']); 
$loopTo = min(count($Address), 10);
for($i = 0; $i < $loopTo; $i++)
{
    echo '<b>'.$Address[$i].'</b><br /><br />';
}

你可以数数并突破foreach(),但为什么不只是:

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

假设数字键。

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

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

foreach (new LimitIterator($Address, 0, 10) as $Another) {
    echo '<b>' . $Another . '</b><br /><br />';
}

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

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

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 />';
}