我正在字符串中放入一个循环,以在回显中回显一个数字;我试着如下:
$array = array();
$result = mysql_query("SHOW TABLES FROM `st_db_1`");
while($row = mysql_fetch_row($result) ){
$result_tb = mysql_query("SELECT id FROM $row[0] LIMIT 1");
$row_tb=mysql_fetch_array($result_tb);
$array[] = $row[0];
$array2[] = $row_tb[0];
//checking for availbility of result_tb
/* if (!$result_tb) {
echo "DB Error, could not list tablesn";
echo 'MySQL Error: ' . mysql_error();
exit;
} */
}
natsort($array);
natsort($array2);
foreach ($array as $item[0] ) {
echo "<a href=show_cls_db.php?id= foreach ($array2 as $item2[0]){echo '"$item2[0]'"}>{$item[0]}<br/><a/>" ;
}
但是php没有考虑在echo中使用foreach循环;请给我推荐一些
正如其他人所提到的,不能在字符串中执行循环。你想做的事情可以这样实现:
foreach ($array as $element) {
echo "<a href='show_cls_db.php?id=" . implode('', $array2) . "'>{$element}</a><br/>";
}
implode(...)
用分隔符连接数组的所有值,分隔符也可以是空字符串。
注:
- 我想你想要
<a>...</a>
之外的<br />
- 我不明白为什么要使用
$item[0]
作为遍历器数组元素的临时存储(因此重命名为$element
)
只需使用implode
,而不是尝试循环数组,
foreach ($array as $item)
{
echo implode("",$array2);
}
另一方面,如果你需要为每个变量做其他逻辑,那么你可以这样做:
foreach ($array as $item)
{
echo '<a href="show_details.php?';
foreach($something as $something_else)
{
echo $something_else;
}
echo '">Value</a>';
}
我们必须看到变量的内容,才能理解你试图做什么。
作为一个疯狂的猜测,我认为你的阵列看起来像:
array(
id => value
)
当您试图访问由初始foreach
生成的值中的[0]
时,您可能试图将密钥和值分开,尝试这样的操作:
foreach($array as $id => $value)
{
echo $id; //This should be the index
echo $value; //This should be the value
}
foreach ($array as $item ) {
echo "<a href='"show_cls_db.php?id=";
foreach ($array2 as $item2) { echo $item2[0]; }
echo "'">{$item[0]}<br/><a/>" ;
}
无意冒犯,但这段代码……很粗糙。将其发布在codereview.stackeexchange.com上,以获得重新分解它的一些帮助。目前的一个快速提示是使用PDO,至少可以转义您的输入。
不管怎么说,正如答案所指出的,你只需回显一个包含"foreach"代码的字符串。我可能会像RobertPitt建议的那样使用implode
。考虑让mysql进行排序,从而更有效地从数据库中排序和选择数据。不要使用as $item[0]
,因为这完全没有意义。清楚地说出你的变量。此外,您的href标记格式错误-即使将foreach循环从echo中拉出,您也可能看不到正确的结果,因为您的浏览器可能会将其全部呈现出来。请确保将这些引号放在应该放的位置。