TBL1
id | detail
1 | this, that
2 | these, those
TBL2
id | visit | cost
1 | this | 20
2 | that | 30
3 | these | 40
4 | those | 50
PHP:
<?php
$id=$_GET['id'];
$detail=$_GET['detail'];
$pieces = explode(",", $rows['detail']);
// $pieces[0]; piece1
// $pieces[1]; piece2
// $pieces[2]; piece2
// $pieces[3]; piece3
// $pieces[4]; piece4
foreach($pieces[1] as $test){
$query="SELECT * FROM tbl1, tbl2 WHERE
$test = tbl2.cost AND
tbl1.id='$id'";
}
$result=mysql_query($query) or die("error: " . mysql_error());
while($rows=mysql_fetch_array($result)){
?>
<table>
<tr>
<td><input value="<? echo $rows['code'];?>" readonly="readonly"/></td>
<td><input value="<? echo $rows['cost']; ?>" readonly="readonly"/></td>
</tr>
</table>
<?php
}
?>
对于id = 1,数组0 =&gt;这个,1 =&gt;那个
所以,foreach($pieces[1] as $test)
,意思是“那个”
以上方法有效,但是,当我将$pieces[1]
更改为$pieces[0]
时,我仍然会得到与$pieces[1]
对应的结果。并且,当我将其更改为不存在的$pieces[4]
时,我再次得到与$pieces[1]
对应的结果。
我在哪里做错了?如何使这个数组工作?
根据tbl1.id = 1 piece [0] =&gt; this,piece [1] =&gt;那个,我想让它适用于我的表。请帮忙。
答案 0 :(得分:1)
$ pieces [1],你在foreach循环中使用的变量是一个字符串,而不是一个数组。你应该循环遍历$ pieces数组,所以:
foreach($pieces as $test){
......不是
foreach($pieces[1] as $test){
答案 1 :(得分:1)
$ pieces [1]不是数组,而是数组的元素($ pieces), 所以更好地使用没有循环语句,
$query="SELECT * FROM tbl1, tbl2 WHERE
$pieces[1] = tbl2.cost AND
tbl1.id='$id'";
由于
答案 2 :(得分:0)
运行时
$result=mysql_query($query) or die("error: " . mysql_error());
它将返回from查询的结果。但你的疑问是什么?它是您设置$ query的最后一个字符串,这是for循环的最后一次迭代。这似乎是低效的,而不是你想要的行为。
假设您想要所有结果(并且不关心查询优化),您可以这样做:
foreach($pieces as $test){
$query="SELECT * FROM tbl1, tbl2 WHERE
$test = tbl2.cost AND tbl1.id='$id'";
$result[]=mysql_query($query) or die("error: " . mysql_error());
}
foreach ($results as $result){
$rows=array_push(mysql_fetch_array($result));
}
现在,如果您只需要特定部分的详细信息,则甚至不需要for循环。
// replace 3 with the desired element
$query="SELECT * FROM tbl1, tbl2 WHERE
$pieces[3] = tbl2.cost AND tbl1.id='$id'";
$result=mysql_query($query) or die("error: " . mysql_error());
mysql_fetch_array($result);