【问题标题】:while loop inside foreach loop in PHPPHP中foreach循环内的while循环
【发布时间】:2017-05-28 22:30:24
【问题描述】:

我想创建一个表,第一列由数据库中的名称组成,第二列由数组中的值组成。 这就是我所拥有的

<table>
    <tr> 
        <?php $arr=array(3,5,2,4,1);                            
        $name= mysql_query("SELECT name FROM table")
        foreach ($arr as $rs){                          
            while($n=mysql_fetch_array($name)){ ?>                      
                <td><?=$n['name']?></td>
                <td><?=$rs?></td>
    </tr>
    <?php   }   }   ?>                          
</table>

我需要类似的输出

name_a 3
name_b 5
name_c 2
name_d 4
name_e 1

提前谢谢你。

【问题讨论】:

  • 正如 Rajdeep 所示,您不需要 foreach 循环。除此之外,我想告诉你,你应该尝试使用 mysqli 而不是 mysql,因为 mysql 已被弃用。欢呼

标签: php loops foreach while-loop


【解决方案1】:

您不需要那个 foreach 循环。只需在while() 循环中使用array_shift() 函数即可获取每个数组元素。所以你的代码应该是这样的:

<table>
    <tr> 
    <?php 
        $arr=array(3,5,2,4,1);                            
        $name= mysql_query("SELECT name FROM table")                        
        while($n=mysql_fetch_array($name)){ 
            $rs = array_shift($arr); 
    ?>                      
            <td><?=$n['name']?></td>
            <td><?=$rs?></td>
    </tr>
    <?php   
        }      
    ?>                          
</table>

此外,您的业务逻辑工作只有在表中的行数等于数组中的元素数时才能工作。如果不是这种情况,那么您需要在查询中使用LIMIT 子句。


旁注:不要使用mysql_* 函数,它们在 PHP 5.5 中已被弃用,并在 PHP 7.0 中被完全删除。请改用mysqlipdoAnd this is why you shouldn't use mysql_* functions

【讨论】:

  • 感谢您的回答。但。你没有别的办法吗?因为实际的数组来自排序过程。当我使用array_shift。数组元素在排序之前返回..你明白我的意思吗?我在数组方面做得不好..很抱歉给你带来了困扰..
  • 我不认为我完全理解,但是您是否尝试在 while 循环之前对数组进行排序?
  • @ゆにたどうえ 正如上面@Cashbee所说的^,您需要在while()循环中使用之前对数组进行排序。或者您至少可以显示您正在排序的代码。
  • @Cashbee 这是我昨天的问题rank $arr 来自那里..当我使用 array_shit() 时,我得到了原始数组..
  • @ゆにたどうえ 这可能是因为您在 $original 数组上应用了 array_shift() 函数,而不是在 $rank 数组上。正确的说法是这样的:$rs = array_shift($rank);。另外,请确保在 while 循环中使用它。
猜你喜欢
  • 1970-01-01
  • 2016-03-14
  • 2014-10-19
  • 2015-07-03
  • 2012-10-02
  • 2016-09-26
  • 2012-07-19
  • 1970-01-01
  • 2013-10-01
相关资源
最近更新 更多