【问题标题】:Looping : PhP Array Loops through Database query to output resultLooping : PhP Array 通过数据库查询循环输出结果
【发布时间】:2014-08-25 02:52:11
【问题描述】:

我有一个名为 $helloArray 的数组,看起来像

[peach] => 1
[banana] => 1
[apple] => 1
[pineapple] => 1
[grapefruit] => 2
[tomatoe] => 2
[giger] => 1
[watermelon] => 1

数据库列的样子

City    peach   banana  apple   pineapple   grapfruit   tomatoe ginger  watermelon
Tokyo   0       0       0       500         0            0      0         0
DC      50      55      0       0           0            0      0         0
NY      0       0       0       0           0            500    0         0
Rome    0       0       0       0           90           0      0         0

我使用的 SQL 语句

$sql = "SELECT peach,banana,apple,pineapple,grapfruit,tomatoe,ginger,watermelon";
$sql .= " FROM TestTable2";
$sql .= " WHERE city ='NY'";  

问题: 如何遍历数组,然后是变量名(又名列名)名称,以便 这样我们就可以得到 2 和 1 的 NY 和 Rome 值。以下是我尝试过的代码,更不用说它不起作用了

foreach ($helloArray as $key =>$value){
         for($i=0;$i<=odbc_num_fields($connection);$i++)
         { if (odbc_result($connection,$i) > 0) {
                echo $value; }
         }


    }

【问题讨论】:

  • 旁注:如果$sql = "SELECT peach,banana,apple,pineapple,grapfruit,tomatoe,ginger,watermelon 是您的实际代码,则您缺少"; --- $sql = "SELECT peach,banana,apple,pineapple,grapfruit,tomatoe,ginger,watermelon";
  • $value != $Value... 你正在回显大写的 $Value foreach 循环输出 $value
  • 修正了这两个错别字,但事实并非如此。
  • 我认为不会,但您仍然在编辑中忘记了引用 watermelon; --- watermelon"; - 所以请发布有效代码。
  • 已修复。谢谢你,先生。我不知道为什么我要试两次。

标签: php arrays loops foreach


【解决方案1】:

好的,如果没有输出样本,我不确定我是否完全理解你的问题,但我猜你想要: 东京 => 1 直流 => 1 纽约 => 2 罗马 => 2

如果是这样,你的方法是错误的。不要拉数据然后按摩它,构造你的 SQL 来返回你想要的数据。

SELECT City, CASE WHEN grapefruit > 0 THEN 2 WHEN tomatoe > 0 THEN 2 WHEN peach > 0 THEN 1 WHEN banana > 0 THEN 1 WHEN ... 

如果它必须是数据驱动的,那么按降序对你的 hello 数组进行排序,然后使用它来生成 SQL 案例条件并返回 vals

-- 编辑--

好的,但是在上面的代码示例中,您将数组作为 key=>value 对进行循环。所以第一次通过,你在 peach=>1,然后循环遍历返回结果中的每一列(桃子、西瓜等)并检查它的值是否大于 0,如果是,那么你从数组中输出值。 (桃子=1)

因为字段名和数组的键之间没有比较,所以您只需在 peach 上为每列输出 1,在香蕉上为每列输出 1 等。虽然我假设您想要检查 NAMED peach 字段是否大于零,如果是,则输出 1,如果名为 watermelon 的字段大于零,则输出 2,您需要修改循环。删除 odbc_num_field 并使用 odbc_result 语法来指定要检索的列名。 odbc_result($connection, $key) > 0.

但是按照您最初的问题,这听起来并不是您真正要寻找的,而是希望根据上述字段比较返回的最大数字(NY = 2)为一个城市分配一个特定值在这种情况下,我的原始答案是正确的,您只需要使用 SQL 为每个城市返回该值。

【讨论】:

  • 嗨,克里斯,数据需要动态生成。最后的代码将填充所选城市的值。很抱歉没有说清楚
  • 好的,但是在上面的代码示例中,您将数组作为键=>值对进行循环。
猜你喜欢
  • 1970-01-01
  • 2017-04-29
  • 2017-10-28
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 2015-05-09
  • 1970-01-01
相关资源
最近更新 更多