纠正多维数组格式以获得输出(如果存在)

时间:2016-03-15 19:38:15

标签: php arrays multidimensional-array

好的,我可能会以错误的方式解决这个问题,所以在进一步讨论之前,我想我会和一些专家一起检查。

以前,在搜索数据库后,我会创建一个数组名称为日期的数组,每个日期只有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。

1 个答案:

答案 0 :(得分:2)

正如你所说的那样: - "但是然后在mysqli while循环上它可能会覆盖第一个数组,如果第二个数组具有相同的date/$foo&# 34;

因此,您需要将${$foo}[$sto_name]更改为${$foo}[$sto_name][]

最好使用${$foo}[]代替${$foo}[$sto_name]

注意: - 它可以在以下两种情况下正常工作: - 您获得单个数据或多个数据。