我正在对返回数组 的数据库执行请求。我正在使用 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<>。(如果我对这些前面的陈述有误,请随时纠正我。)
大声思考
while 和 foreach 是否看起来有点多余,因为它们似乎都会解析值,可能导致我的副本...?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/
我怎样才能完成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)
我脑子里浮现出一些关于一种新编程语言的想法,所以我想我会尝试实现它。一位friend建议我尝试使用Treetop(Rubygem)来创建一个解析器。Treetop的文档很少,我以前从未做过这种事情。我的解析器表现得好像有一个无限循环,但没有堆栈跟踪;事实证明很难追踪到。有人可以指出入门级解析/AST指南的方向吗?我真的需要一些列出规则、常见用法等的东西来使用像Treetop这样的工具。我的语法分析器在GitHub上,以防有人希望帮助我改进它。class{initialize=lambda(name){receiver.name=name}greet=lambda{IO.puts("He
我有多个ActiveRecord子类Item的实例数组,我需要根据最早的事件循环打印。在这种情况下,我需要打印付款和维护日期,如下所示:ItemAmaintenancerequiredin5daysItemBpaymentrequiredin6daysItemApaymentrequiredin7daysItemBmaintenancerequiredin8days我目前有两个查询,用于查找maintenance和payment项目(非排他性查询),并输出如下内容:paymentrequiredin...maintenancerequiredin...有什么方法可以改善上述(丑陋的)代
通过rubykoans.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
我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("
这个问题在这里已经有了答案: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]]
通常,数组被实现为内存块,集合被实现为HashMap,有序集合被实现为跳跃列表。在Ruby中也是如此吗?我正在尝试从性能和内存占用方面评估Ruby中不同容器的使用情况 最佳答案 数组是Ruby核心库的一部分。每个Ruby实现都有自己的数组实现。Ruby语言规范只规定了Ruby数组的行为,并没有规定任何特定的实现策略。它甚至没有指定任何会强制或至少建议特定实现策略的性能约束。然而,大多数Rubyist对数组的性能特征有一些期望,这会迫使不符合它们的实现变得默默无闻,因为实际上没有人会使用它:插入、前置或追加以及删除元素的最坏情况步骤复
我是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每次循环都是新的,我认为每次循环都会捕获不同的变量。例如,这绝对
我正在使用Rails3.2.3和Ruby1.9.3p0。我发现我经常需要确定某个字符串是否出现在选项列表中。看来我可以使用Ruby数组.includemethod:或正则表达式equals-tildematchshorthand用竖线分隔选项:就性能而言,一个比另一个好吗?还有更好的方法吗? 最佳答案 总结:Array#include?包含String元素,在接受和拒绝输入时均胜出,对于您的示例只有三个可接受的值。对于要检查的更大的集合,看起来Set#include?和String元素可能会获胜。如何测试我们应该根据经验对此进行测试
给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[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