我有一个名为$ 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值。下面是我尝试过的代码,更不用说它没有用了
foreach ($helloArray as $key =>$value){
for($i=0;$i<=odbc_num_fields($connection);$i++)
{ if (odbc_result($connection,$i) > 0) {
echo $value; }
}
}
答案 0 :(得分:-1)
好的,不确定我是否完全理解你的问题没有输出样本,但我猜你想要: 东京=&gt; 1 DC =&gt; 1 NY =&gt; 2 罗马=&gt; 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 case条件并返回val
- 编辑 -
好的,但是上面的代码示例,您将循环遍历数组作为key =&gt;值对。首先,你在peach =&gt; 1,然后循环返回结果中的每一列(桃子,西瓜等)并检查它的值是否大于0,如果是,那么你从数组输出值。 (桃子= 1)
因为在fieldname和数组的键之间没有比较,你只需要在桃子上为每一列输出1,在香蕉上输出每列1,等等。虽然我假设你想要检查字段NAMED桃是否大于零,如果是,则输出1,如果名为watermelon的字段大于零然后输出2,则需要修改循环。删除odbc_num_field并使用odbc_result语法指定要检索的列名。 odbc_result($ connection,$ key)&gt; 0
但是按照你原来的问题,听起来并不是你想要的,而是希望一个城市根据上述那些场比较(纽约= 2)返回的最大数量分配一定值。在哪种情况下,我的原始答案代表你只需要使用SQL为每个城市返回该值。