如何从mysqli结果中为php中的while循环中的数组赋值,以制作一个计数器来过滤另一个while循环?

How to assign value to an array in while loop in php from mysqli result to make a counter to filter another while loop?

提问人:Infinite Button 提问时间:5/5/2021 最后编辑:DharmanInfinite Button 更新时间:5/5/2021 访问量:555

问:

如何从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 条记录或大于(限制变量),它将显示为选项但禁用,因此用户无法选择它。 我希望你明白我的意思,如果你对我的问题有什么要澄清的,我会尽量保持积极回答。

PHP 数组 mysqli while-loop

评论

1赞 CBroe 5/5/2021
$counter[] = 在数字键下创建一个新元素。您不希望在此处自动确定密钥,您希望显式指定它 – 。然后你不想给它分配一个数组,而只是直接分配 0。$counter[$row4['sc_time']]
0赞 Infinite Button 5/5/2021
@CBroe 我必须在上面使用数组,因为我要用它作为另一个while循环的计数器
0赞 CBroe 5/5/2021
这与任何事情有什么关系?如果你想要一个你向我们展示的表格的数组作为你需要的,那么就按照我告诉你的去做。如果您需要其他东西 - 那么您首先需要给我们一个适当的解释。(还有什么其他while循环?为什么它需要计数器?
0赞 Infinite Button 5/5/2021
@CBroe我为我的整个问题更新了它。
0赞 CBroe 5/5/2021
所以就按照我当时说的去做......(使用不同的行变量,您在两者之间更改了它)

答:

1赞 Dharman 5/5/2021 #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;
}

评论

0赞 mickmackusa 10/30/2023
也许那时也是如此SELECT tr_sched, 0 counterarray_column($res2->fetch_all(MYSQLI_ASSOC), 'counter', 'tr_sched')
0赞 Dharman 10/30/2023
@mick请将其作为替代答案发布