提问人:Infinite Button 提问时间:5/5/2021 最后编辑:DharmanInfinite Button 更新时间:5/5/2021 访问量:555
如何从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?
问:
如何从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 条记录或大于(限制变量),它将显示为选项但禁用,因此用户无法选择它。 我希望你明白我的意思,如果你对我的问题有什么要澄清的,我会尽量保持积极回答。
答:
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 counter
array_column($res2->fetch_all(MYSQLI_ASSOC), 'counter', 'tr_sched')
0赞
Dharman
10/30/2023
@mick请将其作为替代答案发布
评论
$counter[] =
在数字键下创建一个新元素。您不希望在此处自动确定密钥,您希望显式指定它 – 。然后你不想给它分配一个数组,而只是直接分配 0。$counter[$row4['sc_time']]