好的,我可能会以错误的方式解决这个问题,所以在进一步讨论之前,我想我会和一些专家一起检查。
以前,在搜索数据库后,我会创建一个数组名称为日期的数组,每个日期只有1个数组。然后可以调用它并将其显示在日历的适当部分。 但是现在每个日期可能会有多个条目,我正在尝试更改为多维数组。
$stmt = $dbc->prepare("SELECT stoname, date, hours1, hours2 FROM table WHERE MONTH(date)=? AND YEAR(date)=?");
$stmt->bind_param("ss", $month, $year);
$stmt->execute();
$stmt->bind_result($sto_name, $DB_date, $hours1, $hours2);
while ($stmt->fetch())
{
//Loop through to make new array corresponding to date in database
$foo="_".str_replace("-","",$DB_date); //take the "-" outta the date
${$foo}[$sto_name]=array(
'sto_name'=>$sto_name,
'hours1'=>$hours1,
'hours2'=>$hours2);
}
$stmt->close();
我不确定这是否是最好的方法,虽然看起来确实有效。然而,由于[$sto_name]
未知,因此很难访问数组,看起来我不能使用数字位来调用关联数组,例如$20160316[0]
。在输出中,我需要检查该日期是否存在该数组,而不管[$ sto_name],然后可以预先打印数组。
我曾想过类似的事情:
${$foo}=array(
array(
'sto_name'=>$sto_name,
'hours1'=>$hours1,
'hours2'=>$hours2),
);
但是在mysqli while循环中它可能会覆盖第一个数组,如果有第二个数组具有相同的日期/ $ foo。
答案 0 :(得分:2)
正如你所说的那样: - "但是然后在mysqli while
循环上它可能会覆盖第一个数组,如果第二个数组具有相同的date/$foo
&# 34;
因此,您需要将${$foo}[$sto_name]
更改为${$foo}[$sto_name][]
。
或
最好使用${$foo}[]
代替${$foo}[$sto_name]
注意: - 它可以在以下两种情况下正常工作: - 您获得单个数据或多个数据。