【问题标题】:PHP pass variable to foreach loop from a mySQL resultPHP将变量从mySQL结果传递给foreach循环
【发布时间】:2011-06-16 20:20:10
【问题描述】:

我需要将一个变量从 mySQL 结果传递给一个 foreach 循环。

所以我有这个代码:

    $GetClaim = "SELECT * FROM cR_Claimants WHERE memberID = '".$memberID."' AND ParentSubmission ='".$refNumb."'";
    $resultGetClaim=mysql_query($GetClaim) or die("Error select claimants: ".mysql_error());
    while($rowGetClaim = mysql_fetch_array($resultGetClaim)) {
    $name = $rowGetClaim['Name'];
$city = $rowGetClaim['city'];
$region = $rowGetClaim['region'];

    }

现在我需要将变量传递给 foreach

    foreach($name as $k=>$v) {
    echo $city;
echo $region;
etc..
    }

上面的代码不起作用。我想我不能从 mySQL 循环中传递一个变量。问题还在于我从数据库中获得的每一行都应该与特定的 $name 相关。所以很明显一个 $name 会有自己的 $city 等等。

我如何做到这一点?

请帮忙

【问题讨论】:

  • $name 只是一个变量。不是数组吗?
  • 第一个代码块有什么问题?看起来你已经知道名字了。
  • foreach 无法正常工作。是的 $name 是一个数组。还有更多的 $name 将从数据库结果中获得。这就是我需要一个 foreach $name 的原因。
  • $name 不能是您显示的代码中的数组...它是 Name 列的值(除非您正在反序列化它,但如果是这种情况,您已经完全省略了该代码)
  • @prodigitalson 这就是我问这个问题的原因......因为我需要知道怎么做?!

标签: php mysql loops


【解决方案1】:

您检索的不是包含所有返回记录的数组,而是检索包含单个记录的数组。

要获取下一条name(下一条记录),您必须再次调用 mysql_fetch_array。

您提供的代码通过在一段时间内分配 $rowGetClaim 来隐式执行此操作。失败的 mysql_fetch_array 调用将返回 false,这将退出 while 循环。

绝对没有必要像您介绍的那样使用 for each。只需将 echo 放在分配之后(例如

$region = $rowGetClaim['region'];

echo $region

【讨论】:

  • 不不不..这很简单我知道..我真的需要知道如何在 foreach 中传递它。我无法解释原因,因为在那种情况下我需要一个小时。我只需要知道如何将 $names 转换为对 foreach 有效的数组,并且与 $name 相关的每个结果在 foreach 中都是连续的,例如 $city、$region 等...
  • for each 适用于数组。 $name 不是数组,也不包含所有记录。时期。 while 在所有相关方面都是您的 for each 声明。
【解决方案2】:

要么直接从 eh 循环中输出,要么构建一个数组然后循环遍历它。

while($rowGetClaim = mysql_fetch_array($resultGetClaim)) {
  echo $rowGetClaim['Name'];
  echo $rowGetClaim['city'];
  echo $rowGetClaim['region'];

}

while($rowGetClaim = mysql_fetch_array($resultGetClaim)) {
  foreach($rowGetClaim as $k => $v{
    echo $v;
  }
}

$names = array();
while($rowGetClaim = mysql_fetch_array($resultGetClaim)) {
  $names[] = $rowGetClaim;
}


foreach($names as $data){
  foreach($data as $k => $v) {
    echo $v;
  }
}

【讨论】:

  • 我不确定是否理解最后的代码。为什么你使用两个foreach,一个用于$names,一个用于$data?我只需要将数组 $names 从 mySQL 循环传递给 foreach,然后结果应该是相关的和相应的。这是您提供的代码的作用吗?
  • foreach ($data as $k=>$v) 将每一行拆分为名称/值对,以便 $data[$k]=$v$k 的每个值。这意味着您不需要硬编码您希望在 $data 数组中看到的内容(就键而言)
  • 你的问题不是很清楚。第三个示例将从 DB 检索到的所有行放入 while 循环中的数组中。然后在 foreach 循环中,它遍历该数组,输出该行的所有值。如果您将 mysql 代码放在一个 serete 文件中,并且位于文档的一个完全独立的部分,您将使用这个示例。
  • 第一个和第二个示例都直接在原地输出数据,而您实际上是在循环遍历结果集。唯一的区别是示例一仅输出 3 个列,并通过关联键显式访问它们。第二个示例输出记录上的所有列,并使用循环。
猜你喜欢
  • 2016-01-01
  • 2018-01-22
  • 1970-01-01
  • 2014-01-15
  • 2018-05-14
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多