Php 在X个记录数之后结束Foreach
我有以下疑问:Php 在X个记录数之后结束Foreach,php,mysql,foreach,Php,Mysql,Foreach,我有以下疑问: $trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND() LIMIT 4"); while ($po = $trabajos->fetch_array()) { $trab[] = $po; } 这个查询工作正常,但是,它只显示了4条记录,但是在同一页的另一部分中,我需要相同的表信息,但我不希望它受到限制,比如说,我想要10条而不是4条。所以 节头 截面滑块我不确定您到底想要什么,但
$trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND() LIMIT 4");
while ($po = $trabajos->fetch_array()) {
$trab[] = $po;
}
这个查询工作正常,但是,它只显示了4条记录,但是在同一页的另一部分中,我需要相同的表信息,但我不希望它受到限制,比如说,我想要10条而不是4条。所以
- 节头
- 截面滑块我不确定您到底想要什么,但是如果您想将数组分成两部分。你可以用柜台
$trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND() LIMIT 20"); $i = 0; $trab2 = new Array(); while ($po = $trabajos->fetch_array()) { if($i < 4) { $trab[] = $po; } else { $trab2[] = $po; } $i++; }
这将退出一个循环,但为什么不查询10条记录,生成结果,全部10条,然后只输出其中4条,然后在那里和那边全部10条$trabajos=$con->query(“按兰德从Portapolio订单中选择*限制20”); $i=0; $trab2=新数组(); 而($po=$trabajos->fetch_array()){ 如果($i<4){ $trab[]=$po; }否则{ $trab2[]=$po; } $i++; }
这将适用于任何类型的循环,您也可以使用“继续”跳到循环的下一个过程$x = 0; foreach ($trab as $it) { if($x == 5){ break; //will exit loop as will return. } // My html Code ++$x; }
foreach ($trab as $it) { if($x < 5){ continue; //code below here wont run until $x >= 5. } // My html Code ++$x; }
最简单的方法是使用计数器变量:foreach($trab as$it){ 如果($x<5){ continue;//下面的代码在$x>=5之前不会运行。 } //我的html代码 ++$x; }
function fetch_items($limit=10) { public $trabajos,$trab; $count=0; $trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND()"); while (($po = $trabajos->fetch_array()) && ($count<$limit)) { $count++; $trab[] = $po; } }
函数获取\u项($limit=10){ 公众$trabajos,$trab; $count=0; $trabajos=$con->query(“按兰德()从portafolio订单中选择*”; 而($po=$trabajos->fetch_array())和($counttry
然后,如果你想重复使用这些数据$trabajos=$con->query(“按兰德从portafolio订单中选择*限制10”); $i=0; 而($i<5&&$po=$trabajos->fetch_array()){ ..... ..... $i++; }
mysql_data_seek($trabajos, 0); $i = 0; while ($i < 11 && $po = $trabajos->fetch_array()) { ..... ..... $i++; }
首先,mysql\u data\u seek($trabajos,0); $i=0; 而($i<11&&$po=$trabajos->fetch_array()){ ..... ..... $i++; }
非常可怕,因为它在每次运行查询时基本上都会禁用MySQL的内置缓存。但是,对于我来说,没有最好的方法可以根据脚本的要求来建议如何绕过它。所以请记住这一点。但下面是我的建议 该查询没有RAND()
,而是将限制
限制为仅foreach
前4行,或者是否有方法将该查询用于fetch
但是我用20代替4或10,第一次使用20LIMIT
仅显示前4个,第二个foreach
显示 其余的在前4名之后 是的,就像这样使用:foreach
$trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND() LIMIT 20"); while ($po = $trabajos->fetch_array()) { $trab[] = $po; } $trab_slice_1_size = 4; $trab_slice_2_size = 10; $trab_slice_1 = array_slice($trab, 0, $trab_slice_1_size); $trab_slice_2 = array_slice($trab, $trab_slice_1_size, $trab_slice_2_size);
它的好处是,您可以清晰地选择起点和终点。在我的示例中,我在变量中设置了大小。如果您希望动态更改值,则可以更轻松地在代码中进行调整。
太可怕了。它将禁用MySQL缓存,并导致MySQL查询该数据的时间比预期的要长。你是对的,它在服务器上造成了沉重的负载,我只是在查看日志报告……你建议使用什么替代呢?另一方面,我认为我已经以一种良好的方式构建了我的BataBase,以实现良好和快速的索引,我使用的是虚拟表。谢谢。我喜欢它的简单性,我完全忘记了它的中断;你在第二个代码中使用它的方式我更喜欢它…现在,因为这是我看到的第一个答案,也是我第一个付诸实践的答案,我接受它作为我最初问题的主要答案,因为这是我的想法…但我没有@JakeGould的答案非常棒!你可以根据你的数据存储需求,使用一个SPL可查找的迭代器来增加趣味性,但是我们不要太疯狂。现在这是一些我没想到会得到的奇特的东西,我只是将它与Ajax结合在一起,通过向数组传递一些值,现在用户可以根据需要显示更多的项这不是我想要的,而是我喜欢的,这让我重新设计了我的原创设计,为用户提供了更多的互动性,甚至在网站上提供了更好的体验。不幸的是,我看到@ArtisiticPhoenix首先回答,但我给了你一个+1,谢谢。ORDER BY RAND()
function fetch_items($limit=10) { public $trabajos,$trab; $count=0; $trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND()"); while (($po = $trabajos->fetch_array()) && ($count<$limit)) { $count++; $trab[] = $po; } }
$trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND() LIMIT 10"); $i = 0; while ($i < 5 && $po = $trabajos->fetch_array()) { ..... ..... $i++; }
mysql_data_seek($trabajos, 0); $i = 0; while ($i < 11 && $po = $trabajos->fetch_array()) { ..... ..... $i++; }
$trabajos = $con->query("SELECT * FROM portafolio ORDER BY RAND() LIMIT 20"); while ($po = $trabajos->fetch_array()) { $trab[] = $po; } $trab_slice_1_size = 4; $trab_slice_2_size = 10; $trab_slice_1 = array_slice($trab, 0, $trab_slice_1_size); $trab_slice_2 = array_slice($trab, $trab_slice_1_size, $trab_slice_2_size);