【问题标题】:why the value inside the foreach repeated twice为什么foreach中的值重复了两次
【发布时间】:2017-11-07 14:51:27
【问题描述】:

我想知道为什么 foreach 中的值重复了两次? 我把 foreach 放在一个 while 循环中。但是while循环条件变为false并且仍然重复foreach中的值

<?php
       `$conn = mysqli_connect('localhost','root','','capstone_prac_db');

       $sql1 = "SELECT id FROM stocks ORDER BY id DESC LIMIT 1,1";
       $result1 = mysqli_query($conn,$sql1);

  ?>
   <!DOCTYPE html>
   <html>
   <head>
     <title></title>
    </head>
    <body>
       <?php
           while($row = mysqli_fetch_array($result1)){
               foreach ($row as $value) {
                    echo $value;
              }
           }
       ?>
   </body>
   </html>

【问题讨论】:

  • 很可能你的 while 循环运行了不止一次......它应该为你的查询返回的每一行运行一次

标签: php loops foreach while-loop


【解决方案1】:
<?php

         `$conn = mysqli_connect('localhost','root','','capstone_prac_db');

   $sql1 = "SELECT id FROM stocks ORDER BY id DESC LIMIT 1,1";
       $result1 = mysqli_query($conn,$sql1);

  ?>
   <!DOCTYPE html>
   <html>
   <head>
     <title></title>
    </head>
    <body>
       <?php
       $i=0;
           while($row = mysqli_fetch_array($result1)){

                    echo $row[$i];
                    $i++;

           }
       ?>
   </body>
   </html>

您有 2 个循环,一个嵌套另一个。试试上面的代码。

【讨论】:

  • 视情况而定,有时是必要的,有时是过度杀戮,有时是错误的。根据您期望的输出,这里是错误的。
  • 如果我的回答,回答了你的问题,请接受。
  • 对不起,我是新来的,我不知道该怎么做。
  • 如果回答了您的问题,请按我的答案投票箭头下方的星号。
【解决方案2】:

请参阅mysqli_fetch_array() 的文档并注意第二个参数默认为MYSQLI_BOTH。这意味着您正在迭代的数组由一条记录组成,但以数字和关联方式进行索引。因此,您正在迭代两个都指向相同值的数组索引。

$row[0];
$row['id'];

要更正,请像这样调用函数:

mysqli_fetch_array($result1, MYSQLI_ASSOC)

【讨论】:

    【解决方案3】:

    mysqli::fetch_array 将所有行作为数组返回。 while 循环通常与fetch_row 一起使用,它会循环遍历所有行并分别对每一行执行循环操作。

    与其同时使用两种类型的循环,不如选择一种并使用它运行。你可以使用

    $result = mysqli_fetch_array($result1);
    foreach($result1 as $value){
        //Do your stuff here
    }
    

    while($row = mysqli_fetch_row($result)){
        //Do stuff here
    }
    

    请记住,query 返回一个 mysqli::result 对象,而不是直接返回一个数组。您必须使用结果文档页面上列出的方法之一从对象中获取可用数据。

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-12
      • 1970-01-01
      • 2019-03-26
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多