如何从 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 条记录或大于(限制变量)将显示为选项但禁用,因此用户无法选择它。 我希望你明白我的意思,如果你对我的问题有什么需要澄清的,我会尽力回答。
您根本不需要
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;
}
您可以在 SELECT 子句中硬编码默认的
0
值,然后获取行的整个有效负载,然后使用 3 个参数调用 array_column()
将二维数组简化为平面关联数组。
代码:(PHPize演示)
$sql = <<<SQL
SELECT tr_sched,
0 counter
FROM transaction
WHERE tr_date = CURRENT_DATE()
SQL;
var_export(
array_column(
$mysqli->query($sql)->fetch_all(MYSQLI_ASSOC),
'counter', // use this as new values
'tr_sched' // use this as new keys
)
);
输出:
array (
'6:00 Am' => '0',
'8:00 Am' => '0',
'10:00 Am' => '0',
)