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++;
    }
    
    $trabajos=$con->query(“按兰德从Portapolio订单中选择*限制20”);
    $i=0;
    $trab2=新数组();
    而($po=$trabajos->fetch_array()){
    如果($i<4){
    $trab[]=$po;
    }否则{
    $trab2[]=$po;
    }
    $i++;
    }
    
    这将退出一个循环,但为什么不查询10条记录,生成结果,全部10条,然后只输出其中4条,然后在那里和那边全部10条

    $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++;
    }
    
    首先,
    RAND()
    非常可怕,因为它在每次运行查询时基本上都会禁用MySQL的内置缓存。但是,对于我来说,没有最好的方法可以根据脚本的要求来建议如何绕过它。所以请记住这一点。但下面是我的建议

    该查询没有
    限制
    ,而是将
    foreach
    限制为仅
    fetch
    前4行,或者是否有方法将该查询用于
    LIMIT
    但是我用20代替4或10,第一次使用20
    foreach
    仅显示前4个,第二个
    foreach
    显示 其余的在前4名之后

    是的,就像这样使用:

    $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);
    

    它的好处是,您可以清晰地选择起点和终点。在我的示例中,我在变量中设置了大小。如果您希望动态更改值,则可以更轻松地在代码中进行调整。

    ORDER BY RAND()
    太可怕了。它将禁用MySQL缓存,并导致MySQL查询该数据的时间比预期的要长。你是对的,它在服务器上造成了沉重的负载,我只是在查看日志报告……你建议使用什么替代呢?另一方面,我认为我已经以一种良好的方式构建了我的BataBase,以实现良好和快速的索引,我使用的是虚拟表。谢谢。我喜欢它的简单性,我完全忘记了它的中断;你在第二个代码中使用它的方式我更喜欢它…现在,因为这是我看到的第一个答案,也是我第一个付诸实践的答案,我接受它作为我最初问题的主要答案,因为这是我的想法…但我没有@JakeGould的答案非常棒!你可以根据你的数据存储需求,使用一个SPL可查找的迭代器来增加趣味性,但是我们不要太疯狂。现在这是一些我没想到会得到的奇特的东西,我只是将它与Ajax结合在一起,通过向数组传递一些值,现在用户可以根据需要显示更多的项这不是我想要的,而是我喜欢的,这让我重新设计了我的原创设计,为用户提供了更多的互动性,甚至在网站上提供了更好的体验。不幸的是,我看到@ArtisiticPhoenix首先回答,但我给了你一个+1,谢谢。
    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);