【问题标题】:How to assign value to an array in while loop in php from mysqli result to make a counter to filter another while loop?如何从mysqli结果中为php中的while循环中的数组赋值以使计数器过滤另一个while循环?
【发布时间】:2021-07-27 18:55:34
【问题描述】:

如何根据mysqli结果在php中的while循环中为数组赋值,以使计数器过滤另一个while循环??

我想为我的计数器变量分配类似的东西:

$counter = array("6:00 Am" => 0, "8:00 Am" => 0, "10:00 Am" => 0);

对于此代码:

//This is from transaction table
$stm2 = "SELECT tr_sched FROM transaction WHERE tr_date = CURRENT_DATE()";
$res2 = $conn->query($res2);
while($rows5 = $res2->fetch_assoc())
{
  //Not working
  $counter[] = array($rows5['tr_sched'] => 0)
}

因此,如果调度时间大于我的限制变量,我可以过滤另一个 while 循环,如下所示:

//This is from my schedule table
$stm = "SELECT sc_time FROM schedule GROUP BY sc_time";
$res = $conn->query($stm);
$counter = array();
while($row4 = $res4->fetch_assoc())
{
  //Note working
  if($counter[$row4['sc_time']] >= $limit/*=10*/)
  {
  echo "<option disabled="">" . $row4['sc_time'] . "</option>";
  }
  else
  {
  echo "<option>" . $row4['sc_time'] . "</option>";
  }
}

以上所有代码的目标是显示调度表中的所有调度时间作为选择元素的选项,并且如果调度时间已经有10条或大于10条记录(限制变量)在我今天的交易表上,它将显示为选项但禁用,因此用户无法选择它。 我希望你明白我的意思,如果你对我的问题有什么要澄清的,我会尽量保持积极的回答。

【问题讨论】:

  • $counter[] = 在数字键下创建一个新元素。您不希望在此处自动确定密钥,而是要明确指定它 - $counter[$row4['sc_time']]。然后你不想给它分配一个数组,而只是直接分配0。
  • @CBroe 我必须在其上使用数组,因为我将使用它作为我的另一个 while 循环的计数器
  • 这有什么关系?如果您想要一个您向我们展示的表单数组作为您需要的,然后按照我告诉你的那样做。如果您需要别的东西 - 那么您首先需要给我们一个正确的解释。 (还有什么while循环?为什么需要一个计数器?)
  • @CBroe 我为我的整个问题更新了它。
  • 那么就照我说的做吧……(使用不同的行变量,你在两者之间进行了更改)

标签: php arrays mysqli while-loop


【解决方案1】:

您根本不需要while 循环。

您可以使用数组函数用静态值填充数组。

$stm2 = "SELECT tr_sched FROM transaction WHERE tr_date = CURRENT_DATE()";
$res2 = $conn->query($stm2);
// get values from a single column
$keys = array_column($res2->fetch_all(MYSQLI_ASSOC), 'tr_sched');
// create an array with all values as 0 and keys from $keys
$counter = array_fill_keys($keys, 0);

当然,以后不要用$counter = array();重置数组

如果您仍然想循环,那么您可以使用简单的foreach 循环。

$stm2 = "SELECT tr_sched FROM transaction WHERE tr_date = CURRENT_DATE()";
$res2 = $conn->query($stm2);
foreach($res2 as $rows5) {
    $counter[$rows5['tr_sched']] = 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多