将来自多行的数据组合成单个数组

时间:2017-06-09 18:02:43

标签: php arrays

我有一些代码从MS SQL数据库的多个表中提取,排列数据并输出数组,然后我需要使用该数组来填充工作表,告诉别人每天需要哪些项目。现在输出如下所示,其中字段是ID,名称,日期,数字(它们是星号,因为某些名称包含逗号)。

74*xxxx*2017-06-04*1
74*xxxx*2017-06-05*1
74*xxxx*2017-06-06*2
74*xxxx*2017-06-07*2
74*xxxx*2017-06-08*2
74*xxxx*2017-06-09*2
74*xxxx*2017-06-10*2
75*yyyy*2017-06-05*123
75*yyyy*2017-06-06*111
75*yyyy*2017-06-07*124
75*yyyy*2017-06-08*107
75*yyyy*2017-06-09*194
75*yyyy*2017-06-10*195

我试图让他们将它们合并为每个ID的单个值,以便我可以将其打印到网格中,看起来类似于:

| ID | NAME | 06-04 | 06-05 | 06-06 | 06-07 | 06-08 | 06-09 | 06-10 |
| 74 | xxxx |   1   |   1   |   2   |   2   |   2   |   2   |   2   |
| 75 | yyyy |   -   |  123  |  111  |  124  |  107  |  194  |  195  | 

我的意图是将数组值合并为一个数组,并以日期作为键,我尝试的(最新)代码是:

$schedule[] = $PID . "*" . $program . "*" .  $date . "*" .  $num;


$grid = array();
foreach ($schedule as $item ) {

    $ex = explode('*', $item);
    $grid[$ex[0]] = array(
        'name' => $ex[1],
        $ex[2] => $ex[3],
    );
}

意图将它们合并为单个数组行,如下所示:

[74] => Array ( [name] => xxxx [2017-06-04] => 1 [2017-06-05] => 1 [2017-06-06] => 2 [2017-06-07] => 2 [2017-06-08] => 2 [2017-06-09] => 2 [2017-06-10] => 2)

之后我可以逐行使用$ grid [$ i] [1]等来拉取值并打印到每个单元格。我已经尝试了除上述之外的其他方法,这是我目前唯一拥有代码片段的方法,而且我只能得到它以保持每个ID添加的最后一个值。

我确定有一件我遗失或根本不理解,如果有人能提供一些意见,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果我理解了您的要求,下面的代码将提供所需的数组。

$schedule[] = '74*xxxx*2017-06-04*1';
$schedule[] = '74*xxxx*2017-06-05*1';
$schedule[] = '74*xxxx*2017-06-06*2';
$schedule[] = '74*xxxx*2017-06-07*2';
$schedule[] = '74*xxxx*2017-06-08*2';
$schedule[] = '74*xxxx*2017-06-09*2';
$schedule[] = '74*xxxx*2017-06-10*2';
$schedule[] = '75*yyyy*2017-06-05*123';
$schedule[] = '75*yyyy*2017-06-06*111';
$schedule[] = '75*yyyy*2017-06-07*124';
$schedule[] = '75*yyyy*2017-06-08*107';
$schedule[] = '75*yyyy*2017-06-09*194';
$schedule[] = '75*yyyy*2017-06-10*195';

$grid = array();
foreach ($schedule as $item ) {
    $ex = explode('*', $item);
    $grid[$ex[0]]['name'] = $ex[1];
    $grid[$ex[0]][$ex[2]] = $ex[3];
}
print_r($grid);

而且输出是

Array
(
    [74] => Array
        (
            [name] => xxxx
            [2017-06-04] => 1
            [2017-06-05] => 1
            [2017-06-06] => 2
            [2017-06-07] => 2
            [2017-06-08] => 2
            [2017-06-09] => 2
            [2017-06-10] => 2
        )

    [75] => Array
        (
            [name] => yyyy
            [2017-06-05] => 123
            [2017-06-06] => 111
            [2017-06-07] => 124
            [2017-06-08] => 107
            [2017-06-09] => 194
            [2017-06-10] => 195
        )

)