在PHP中向数组添加行

时间:2010-05-24 20:30:14

标签: php arrays sorting

我已经从MySQL数据库表中加载了一个关联的记录数组。

该数组由1到7行组成,代表一周的条目, 可能每天都没有输入。

如何在缺失的日子中将空行插入数组中 这样我就可以轻松地在表格中显示数据了吗?

我不需要用空格更新数据库。

示例:

             Field1  Field2  Field3  Field4 .... Field#  
Record[0]
Record[1]
Record[2]
Record[3]
Record[4]
Record[5]
Record[6]

Field4是yyyy-mm-dd的日期

我使用开始日期和结束日期自动加载数组

有些星期会有太阳,星期二,星期五或星期一,星期二,星期三,星期五和星期五。周六

3 个答案:

答案 0 :(得分:4)

这很简单: 你知道你每天有多少“菲尔兹”吗?让我们说它是“字段数”

$records = array_fill(0, 7, array_fill(0, <num of fields>, ''));

它的作用是从[0]到[6]创建一个空白数组,并为每个数组元素插入另一个“Fields”数组,其中包含“num of fields”,每个数组都设置为一个空字符串''

现在你有了这个,你从mysql表读取你的数据,如果你有选择地按索引分配$记录(我假设),其余的将保持空白。

请记住,您可以使用类似

之类的内容重新分配$ records数组元素
$records[5] = array('New value', 'Field2 value');

这是从mysql表读取数据时的操作。

您是否在mysql表中使用某种索引来对应一周内编号的日期?

如果您遇到mysql部分,请在此处发表评论。

答案 1 :(得分:1)

如果您的数组是关联的,那么在构造表时,为什么不检查并跳过空行?举个例子:

示例1:

if ($row['Monday'] == '')
{
    // draw blank template
}
else
{
    // draw using live data
}

基于添加的示例(未经测试;对于php 5.1及更高版本):

示例2:

for($i = 0; $i < count($Record); $i++)
{
    $recordDate = strtotime($Record[$i][field4]);
    $dayOfWeek = $date('N', $recordDate);
    switch ($dayOfWeek)
    {
        case '1':
            // Monday
            break;
        case '2':
            // Tuesday
            break;
        // and so on...
     }
}

修改

上面的代码假设您的行按工作日顺序排列,可能有遗漏。第一个例子的问题是,数组不像例子那样是关联的。第二个例子的问题是,缺少工作日行导致完全跳过的输出,这可能提供类似MTWFS的表(跳过星期四)。

因此,您需要构建一个循环来绘制一周中的每一天,并检查所有行以获取适当的绘制日期。如果找不到日期,则会显示空白日期:

示例3:

$dayNames = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'};
// Loop that walks the days of the week:
for($d = 1; $d < 7; $d++)
{
  // Loop that checks each record for the matching day of week:
  $dayFound = false;
  for($i = 0; $i < count($Record); $i++)
  {
    $recordDate = strtotime($Record[$i][field4]);
    $dayOfWeek = $date('N', $recordDate);
    // output this day name in your own formatting, table, etc.
    echo $dayNames[$i];
    if ($dayOfWeek == $d)
    {
        // output this day's data
        $dayFound = true;
        break;
    }
    if (!$dayFound)
    {
      // output a blank template
    }
  }
}

修改2

好吧,你似乎更感兴趣的是拥有一个完整填充的工作日数组而不是输出例程(我假设你只想在php或其他东西中绘制表格)。所以这是我如何得到一个没有间隙的7天阵列的例子:

示例4:

$weekData = array(); // create a new array to hold the final result
// Loop that walks the days of the week, note 0-based index
for($d = 0; $d < 6; $d++)
{
  // Loop that checks each record for the matching day of week:
  $dayFound = false;
  for($i = 0; $i < count($Record); $i++)
  {
    $recordDate = strtotime($Record[$i][field4]);
    $dayOfWeek = $date('N', $recordDate);
    // Add one to $d because $date('N',...) is a 1-based index, Mon - Sun
    if ($dayOfWeek == $d + 1)
    {
        // Assign whatever fields you need to the new array at this index
        $weekData[$d][field1] = $Record[$i][field1];
        $weekData[$d][field2] = $Record[$i][field2];
        $weekData[$d][field3] = $Record[$i][field3];
        $weekData[$d][field4] = $Record[$i][field4];
        // ...
        break;
    }
    if (!$dayFound)
    {
      // Assign whatever default values you need to the new array at this index
      $weekData[$d][field1] = "Field 1 Default";
      // ...
    }
  }
}

答案 2 :(得分:0)

没有看到你当前的代码(正如Felix Kling的评论中所要求的那样),我的猜测是你需要遍历你的数组,将它传递给一个函数(或将数组传递给函数),它检查{ {1}}并跟踪该周的哪些天有数据并填写缺失的日子。如果阵列是为了开始,这会更容易(因为你只需要跟踪前一个'条目'而不是整个星期。)

我目前有点忙,这里有一些需要扩展的pseduo代码等。

Field4

你应该得到照片。