PHP:如何在echo语句中使用foreach循环


PHP : how to use foreach loop inside an echo statement?

我正在字符串中放入一个循环,以在回显中回显一个数字;我试着如下:

     $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(...)用分隔符连接数组的所有值,分隔符也可以是空字符串。

注:

  1. 我想你想要<a>...</a>之外的<br />
  2. 我不明白为什么要使用$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中拉出,您也可能看不到正确的结果,因为您的浏览器可能会将其全部呈现出来。请确保将这些引号放在应该放的位置。