【问题标题】:PHP Display Count Total for a Variable within FOREACH loopFOREACH 循环中变量的 PHP 显示总数
【发布时间】:2015-06-02 17:56:12
【问题描述】:

我有一个 foreach 循环,我想获取第二个回显的 $item 的计数/总数。有没有办法计算一个变量并在 foreach 循环中显示总数?如果没有,我可以做一个单独的 sql 并存储计数并将其传递到下面指示的位置,还是只能从一个 sql 数组(在这种情况下为 $row)返回变量?

结果如下:
费用   项目
费用 1  3
费用 2  1
成本 3  4 等等。

但是,这些项目未与 Cost 存储在同一个表中。它们通过表 ID 连接连接。所以在 foreach 中,$cost 和 $item 必须是两个单独查询的结果。我想我的问题是,如果我这样做,每一行在循环时如何知道与每个成本匹配的项目?

foreach ($row as $this) {
echo "<td>$this[cost]</td>"; 
echo "<td> //want to get count of $item variable here! </td>";

【问题讨论】:

  • 你的第二个变量是什么 - $row['something'] 或 $item。如果 $item 那么它是数组还是其他什么?
  • $item 将是我要计算的第二个变量,但要获得 $item 需要一个具有多个连接的 COUNT()。即使该变量不是 foreach 变量的一部分,我是否可以在 foreach 循环中的 中插入整个 SQL 选择和连接?或者我可以有一个单独的带有连接的 SQL 来获取 $item 计数,然后将结果存储在 中?
  • 我推荐你在 PHP 中使用模板

标签: php foreach


【解决方案1】:
$counter = count($row);  //counts the total elements of $row array

另一种方法是在 foreach 循环之外放置一个计数器,如下所示:

$counter = 0;
foreach ($row as $this) {
  echo "<td>$this[cost]</td>"; 
  echo "<td> //want to get count of {$counter} variable here! </td>";
  $counter++;
}

稍后编辑以了解我的意思:

$sql_response = mysqli_query($link, "SELECT `product_name`, `product_price` FROM `products` WHERE `product_price`>499");   //let's assume that we have 98 products that meet this condition
$no_of_rows = 0;
if ($sql_response) $no_of_rows = mysqli_num_rows($sql_response);  //this will count the number of rows that are in $sql_response right now
echo $no_of_rows;  //will output 98 if the query was successfully

如果你有一个包含如下元素的数组:

$my_array = array( 0 => array( 'test1' => '123'),
                   1 => array( 'test2' => '123'),
                   2 => array( 'test3' => '123') );

echo count($my_array); //will output 3

【讨论】:

  • 这些都可以,只是我试图获取的 $items 计数需要一个带有连接的复杂查询,而且我不确定我是否可以简单地将 sql 结果存储在 foreach 中,因为如何foreach 会知道每一行中哪些结果放在一起吗?
  • @JA4677 我重新编辑了我的答案。请看看它是否对您有帮助。
  • 谢谢。我明白你在做什么。这里的问题是该代码不会返回价格 = 正好是某个金额(如 1.22 美元)的行。我需要以某种方式获取价格 = PID(价格 ID)的项目的计数,然后在 PID = PID 的返回的每一行中动态地给出该计数。另外,我正在使用 PDO。可以和mysqlii混用吗?
【解决方案2】:

据我了解,您希望从不同的表中获取两个值。它们与 Table_id 相连。为此,您不需要触发两个请求。一个用于成本,一个用于项目。

更好的方法是在单个查询中使用join。并同时显示。

select c.cost, i.item
from cost_table c
left join item_table i on i.id = c.id 
where something = something 

现在什么时候可以在 foreach 中使用

foreach ($row as $this) {
  echo "<td> $this[cost] </td>"; 
  echo "<td> $this[item] </td>";
}

要了解加入请到这里http://www.w3schools.com/sql/sql_join_left.asp

希望对你有用..

【讨论】:

  • 这是我希望做的事情的正确轨道,但我还需要它来 count() $item 的总数,我不确定如何在 foreach 循环中做到这一点。我假设需要第二个选择计数查询,但是我无法在 foreach 循环中使用它,它只能处理我认为的一个查询/数组。还是我错了?无论如何,我将如何获得 $item 的计数并将其显示在 foreach 循环中,以便它是每一行的正确计数
  • 我很困惑。 :( [1] 如果 $item 是数组,则使用 count( $this[item] ). inside &lt;td&gt;&lt;/td&gt; [2] 如果您想要总计 $item,则使用 $temp += $this[$item] [3] $i = 0 在 foreach 外部和内部 &lt;td&gt; $i++; $this[item] &lt;/td&gt; [4] 在 foreach echo count($row) 之外,我希望这些不同的选项对您有所帮助。
猜你喜欢
相关资源
最近更新 更多
热门标签