【问题标题】:Iterating values fetched from mysqli迭代从 mysqli 获取的值
【发布时间】:2017-08-23 05:17:29
【问题描述】:

所以我正在创建一个动态菜单。我将菜单的主要类别存储在一个单独的表中,将子类别存储在另一个表中。 它们是这样存储的

Categories Table
          id         cat_name
           1         HOME,
           2         PRODUCTS,
           3         SOLUTIONS,
           4         NEWS & GALLERY,
           5         DOWNLOADS,
           6         CONTACT   

现在我正在运行一个查询

$sql="SELECT * FROM categories";
$query = mysqli_query($con, $sql);
while($row = mysqli_fetch_assoc($query)) { 
$row['cat_name'];
$cat=explode(",",$row['cat_name']);
}

然后在需要的地方打印这样的值

<?php echo $cat[0]; .. echo $cat[1]; //and so on ?>

现在看起来像this。它应该看起来像this 但是这个解决方案的问题是我必须定义数组的索引来打印它。

我正在为此开发管理面板,我希望如果管理员添加一个新菜单项,那么它应该自动获取并显示它。 但是使用此解决方案是不可能的。 我正在考虑使用 for 循环迭代值,但无法正确处理。

【问题讨论】:

    标签: php mysql html mysqli


    【解决方案1】:

    使用 foreach ($query as $rows)

    用于 ($i=0; $i

    【讨论】:

      【解决方案2】:

      或许你也可以试试这个

      $sql="SELECT * FROM categories";
      $query = mysqli_query($con, $sql);
       while($row = mysqli_fetch_assoc($query))
       { 
          $row['cat_name'];
         $cat=explode(",",$row['cat_name']);
         foreach($cat as $catss) 
        {
          $cat = trim($catss);
          $categories .= "<category>" . $cat . "</category>\n";
         }
      }
      

      【讨论】:

        【解决方案3】:

        您可以尝试这种方式,如果您希望这样的动态菜单:

         $sql="SELECT * FROM categories";
             $query = mysqli_query($con, $sql);
             $menu = '';
             $menu .= '<ul>';
             while($row = mysqli_fetch_assoc($query))
             { 
               $menu .= '<li>' . $row['cat_name'] . '</li>';
             }
             $menu .= '</ul>';
             echo $menu;
        

        当您从表中获取数据时,您可以使用字段名称直接打印该值。如果您想进一步使用它,则必须添加一个数组,例如:

        $cat[] = $row['cat_name'];
        

        然后您可以使用 for 或 while 以这种方式使用此值:

        foreach ($cat as $value) {
           echo $value;
        }
        

        【讨论】:

        • 将数据库中的所有值打印在一个变量中-_-
        【解决方案4】:
        echo '<ul>';
        
        foreach ($cat as $val) {
            echo "<li>{$val}</li>";
        }
        
        echo '</ul>';
        

        而不是index。此外,这应该比for 循环更快、更易读。

        【讨论】:

          【解决方案5】:

          您可以将其保存在数组中,然后再访问这些值。

           $sql="SELECT * FROM categories";
           $query = mysqli_query($con, $sql);
           $cat = array();
           while($row = mysqli_fetch_assoc($query)) { 
                 $cat[]=$row['cat_name']
           }
          

          现在:

          foreach ($cat as $category) {
               $cate_gory = explode("," , $category);
               foreach ($cate_gory as $categories) {
                           echo $categories . "<br>";
               }
          }
          

          【讨论】:

          • 这就是我现在正在做的事情!但我想要的是,如果一个新的菜单项被添加到表中,它也应该自动显示。不能通过打印数组的索引来实现。
          • 编辑了我的答案@PrakharSood
          • @PrakharSood 仅供参考,变量$cat[$i] 表示数组中的每个元素。所以,当我们这样回应它时,所有的值都会根据你的喜好一一显示。
          • 是的,但我正在应用相同的 for 循环,它同时为我提供了表中的所有值。如果你愿意,我可以告诉你
          • 这不是你想要的吗?要显示表中的所有值?说完所有的值,我假设 values 属于 categories @PrakharSood
          【解决方案6】:

          Foreach 循环

          foreach($cats as $cat)
          {
              echo $cat;
          }
          

          基本的 For 循环

          for ($i=0; $i<count($cats); $i++) 
          {
              echo $cats[$i];
          }
          

          简单用例

          <?php
          
          $cats = 'Stack overflow PHP questions';
          $cats = explode(' ',$cats);
          $html = '<ul>';
          foreach($cats as $cat)
          {
              $html .= '<li>' . $cat . '</li>';
          }
          $html .= '</ul>';
          echo $html;
          
          ?>
          

          您的代码

          在这种情况下,您使用的 while 循环将遍历从 sql 语句返回的所有值,因此无需增加更多复杂性。我会从字段名称中删除逗号并以这种方式回显 html。

          $sql="SELECT * FROM categories";
          $query = mysqli_query($con, $sql);
          $html = '<ul>';
          while($row = mysqli_fetch_assoc($query)) { 
              $html .= '<li>' . $row['cat_name'] . '</li>';
          }
          $html .= '</ul>';
          echo $html;
          
          ?>
          

          【讨论】:

          • 问题是这个解决方案打印单个变量中的所有值,即 $cats[$i] 或 foreach 循环的情况 $cat。它将表中的所有值打印在一个变量中,这不是我的目标。
          • 在单个变量中是什么意思?
          • 别搞混了,每次都是不同的变量,依次遍历数组。
          • 当我使用explode 函数将变量存储在$cat 中时。当使用 for 循环迭代存储在 $cat 中的值时,它只给出第一个值,即表中的 HOME。 ://
          • 这可能是一个完全不同的问题,运行我上面的示例代码
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-10-22
          • 1970-01-01
          • 2020-10-11
          • 2021-03-06
          • 2012-10-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多