草庐IT

php - mysqli_fetch_array() foreach 循环重复

coder 2023-10-15 原文

我正在对返回数组 的数据库执行请求。我正在使用 foreach 循环来遍历这些值。

数据库(只有 1 个条目)

id | field1 | field2 | field3 | field4 | field5
---|--------|--------|--------|--------|--------
1  | value1 |        | value3 | value4 | value5

PHP 源代码

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$q = mysqli_query($mysqli, "SELECT * FROM my_table");

echo "<ul>";
    while($q = mysqli_fetch_array($q))
    {
        foreach ($q as $key => $value)
        {
            if($value != NULL)
            {
                echo "<li>".$value . "</li>";

                // Line below used to show column name and corresponding value
                //echo "<li><strong>{$key}</strong> / <em>{$value}</em></li>";
            }
        }
    }
echo "</ul>";

预期的 HTML 输出

<ul>
    <li>value1</li>
    <li>value3</li>
    <li>value4</li>
    <li>value5</li>
</ul>

当前输出

<ul>
    <li>1</li>
    <li>1</li>
    <li>value1</li>
    <li>value1</li>
    <li>value3</li>
    <li>value3</li>
    <li>value4</li>
    <li>value4</li>
    <li>value5</li>
    <li>value5</li>
</ul>

当前问题

如您所见,我目前的所有内容都是双倍的,出于某种奇怪的原因,我正在获取行 ID,或者我假设考虑到在向数据库中添加新行时我没有获得第二行.

备用代码

使用注释行,我得到了这个输出:

<ul>
    <li>0 / 1</li>
    <li>id / 1</li>
    <li>1 / value1</li>
    <li>field1 / value1</li>
    <li>3 / value3</li>
    <li>field3 / value3</li>
    <li>4 / value4</li>
    <li>field4 / value4</li>
    <li>5 / value5</li>
    <li>field5 / value5</li>
</ul>

据我了解

  • while 循环可以让我遍历数据库中的每一行。
  • foreach 循环类似于 while 循环,但它不是遍历数据库条目,而是遍历 array<>

(如果我对这些前面的陈述有误,请随时纠正我。)

大声思考

  • 我开始怀疑,当我写这个问题时,whileforeach 是否看起来有点多余,因为它们似乎都会解析值,可能导致我的副本...?
  • 行号(在本例中为 1)不是键吗?

最佳答案

默认情况下,mysqli_fetch_array() 返回关联数组($key => $value)和数值数组(0 => value code>),这就是为什么你会得到重复的原因 - 一些条目以列名作为键,其他条目有一个数字索引。

如果你想要一个关联数组,你可以使用:

 mysqli_fetch_array($q, MYSQLI_ASSOC);
 //or
 mysqli_fetch_assoc($q);

或者对于数值数组:

 mysqli_fetch_array($q, MYSQLI_NUM);
 //or
 mysqli_fetch_row($q);

更多信息:http://www.php.net/manual/en/mysqli-result.fetch-array.php

关于php - mysqli_fetch_array() foreach 循环重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20649330/

有关php - mysqli_fetch_array() foreach 循环重复的更多相关文章

  1. ruby - 在 Ruby 中实现 `call_user_func_array` - 2

    我怎样才能完成http://php.net/manual/en/function.call-user-func-array.php在ruby中?所以我可以这样做:classAppdeffoo(a,b)putsa+benddefbarargs=[1,2]App.send(:foo,args)#doesn'tworkApp.send(:foo,args[0],args[1])#doeswork,butdoesnotscaleendend 最佳答案 尝试分解数组App.send(:foo,*args)

  2. ruby - 树顶语法无限循环 - 2

    我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He

  3. ruby-on-rails - 在 Ruby 中循环遍历多个数组 - 2

    我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代

  4. Ruby Koans about_array_assignment - 非平行与平行分配歧视 - 2

    通过ruby​​koans.com,我在about_array_assignment.rb中遇到了这两段代码你怎么知道第一个是非并行赋值,第二个是一个变量的并行赋值?在我看来,除了命名差异之外,代码几乎完全相同。4deftest_non_parallel_assignment5names=["John","Smith"]6assert_equal["John","Smith"],names7end45deftest_parallel_assignment_with_one_variable46first_name,=["John","Smith"]47assert_equal'John

  5. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  6. arrays - 这是 Ruby 中 Array.fill 方法的错误吗? - 2

    这个问题在这里已经有了答案:Arraysmisbehaving(1个回答)关闭6年前。是否应该这样,即我误解了,还是错误?a=Array.new(3,Array.new(3))a[1].fill('g')=>[["g","g","g"],["g","g","g"],["g","g","g"]]它不应该导致:=>[[nil,nil,nil],["g","g","g"],[nil,nil,nil]]

  7. ruby - Arrays Sets 和 SortedSets 在 Ruby 中是如何实现的 - 2

    通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复

  8. ruby - Ruby 中的闭包和 for 循环 - 2

    我是Ruby的新手,有些闭包逻辑让我感到困惑。考虑这段代码:array=[]foriin(1..5)array[5,5,5,5,5]这对我来说很有意义,因为i被绑定(bind)在循环之外,所以每次循环都会捕获相同的变量。使用每个block可以解决这个问题对我来说也很有意义:array=[](1..5).each{|i|array[1,2,3,4,5]...因为现在每次通过时都单独声明i。但现在我迷路了:为什么我不能通过引入一个中间变量来修复它?array=[]foriin1..5j=iarray[5,5,5,5,5]因为j每次循环都是新的,我认为每次循环都会捕获不同的变量。例如,这绝对

  9. Ruby on Rails regexp equals-tilde 与 array include 用于检查选项列表 - 2

    我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试

  10. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

随机推荐