好的,我遇到了一个小问题。
我对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 />';
}